Tất cả các câu trả lời sau đây giả định rằng các hàng được trả về trong đối sánh đặt hàng.
Postgres 9.3
Với tính năng kỳ quặc là làm nổ các hàng từ các hàm SRF trả về giống nhau số hàng song song:
SELECT count(*) AS mismatches
FROM (
SELECT function1('tblp1','tblp2',49) AS f1
, function2('tblp1_v2','tblp2_v2',49) AS f2
) sub
WHERE (f1).dist <> (f2).dist; -- note the parentheses!
Các dấu ngoặc đơn xung quanh loại hàng là cần thiết để phân biệt với một tham chiếu bảng có thể có. Chi tiết trong sách hướng dẫn tại đây.
Điều này mặc định là tích số Descartes của các hàng nếu số lượng hàng được trả về không giống nhau (điều này sẽ phá vỡ hoàn toàn đối với bạn).
Postgres 9.4
WITH ORDINALITY
để tạo số hàng một cách nhanh chóng
Bạn có thể sử dụng WITH ORDINALITY
để tạo một số hàng một cách nhanh chóng và không cần phụ thuộc vào việc ghép nối kết quả của các hàm SRF trong SELECT
danh sách:
SELECT count(*) AS mismatches
FROM function1('tblp1','tblp2',49) WITH ORDINALITY AS f1(id,dist,rn)
FULL JOIN function2('tblp1_v2','tblp2_v2',49) WITH ORDINALITY AS f2(id,dist,rn) USING (rn)
WHERE f1.dist IS DISTINCT FROM f2.dist;
Điều này hoạt động đối với cùng một số hàng từ mỗi hàm cũng như các số khác nhau (sẽ được tính là không khớp).
Có liên quan:
ROWS FROM
để tham gia các tập hợp từng hàng
SELECT count(*) AS mismatches
FROM ROWS FROM (function1('tblp1','tblp2',49)
, function2('tblp1_v2','tblp2_v2',49)) t(id1, dist1, id2, dist2)
WHERE t.dist1 IS DISTINCT FROM t.dist2;
Câu trả lời liên quan:
Bên cạnh:
EXECUTE FORMAT
không phải là một bộ chức năng plpgsql. RETURN QUERY
Là. format()
chỉ là một hàm thuận tiện để xây dựng một chuỗi truy vấn, có thể được sử dụng ở bất kỳ đâu trong SQL hoặc plpgsql.