Semua jawaban berikut mengasumsikan bahwa baris dikembalikan dalam cocok pesan.
Postgres 9.3
Dengan fitur unik ledakan baris dari fungsi SRF mengembalikan sama jumlah baris paralel:
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!
Tanda kurung di sekitar tipe baris diperlukan untuk membedakan dari referensi tabel yang mungkin. Detail dalam manual di sini.
Ini default ke produk Cartesian baris jika jumlah baris yang dikembalikan tidak sama (yang akan merusaknya sepenuhnya untuk Anda).
Postgres 9.4
WITH ORDINALITY
untuk menghasilkan nomor baris dengan cepat
Anda dapat menggunakan WITH ORDINALITY
untuk menghasilkan nomor baris dengan cepat dan tidak perlu bergantung pada pasangan hasil fungsi SRF di SELECT
daftar:
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;
Ini berfungsi untuk jumlah baris yang sama dari setiap fungsi serta nomor yang berbeda (yang akan dihitung sebagai ketidakcocokan).
Terkait:
ROWS FROM
untuk bergabung dengan set baris demi baris
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;
Jawaban terkait:
Selain:EXECUTE FORMAT
bukan fungsi plpgsql yang ditetapkan. RETURN QUERY
adalah. format()
hanyalah fungsi yang nyaman untuk membangun string kueri, dapat digunakan di mana saja dalam SQL atau plpgsql.