Alle de følgende svar forudsætter, at rækker returneres i matching bestille.
Postgres 9.3
Med den finurlige funktion at eksplodere rækker fra SRF-funktioner, der returnerer det samme antal rækker parallelt:
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!
Parenteserne omkring rækketypen er nødvendige for at disambiguere fra en eventuel tabelreference. Detaljer i manualen her.
Dette er standard til kartesisk produkt af rækker, hvis antallet af returnerede rækker ikke er det samme (hvilket ville bryde det fuldstændigt for dig).
Postgres 9.4
MED ORDINALITET
at generere rækkenumre i farten
Du kan bruge WITH ORDINALITY
for at generere et rækkenummer i fluen og behøver ikke at være afhængig af at parre resultatet af SRF-funktioner i SELECT
liste:
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;
Dette virker for det samme antal rækker fra hver funktion såvel som forskellige tal (hvilket vil blive talt som uoverensstemmelse).
Relateret:
RÆKKER FRA
at forbinde sæt række for række
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;
Relateret svar:
Til side:UDFØR FORMAT
er ikke en sæt plpgsql-funktionalitet. RETURN QUERY
er. format()
er blot en praktisk funktion til at bygge en forespørgselsstreng, kan bruges hvor som helst i SQL eller plpgsql.