Wszystkie poniższe odpowiedzi zakładają, że wiersze są zwracane w dopasowaniu zamówienie.
Postgres 9.3
Dzięki dziwacznej funkcji rozbijania wierszy z funkcji SRF zwracających to samo liczba rzędów równolegle:
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!
Nawiasy wokół typu wiersza są niezbędne do odróżnienia od możliwego odwołania do tabeli. Szczegóły w instrukcji tutaj.
Jest to domyślnie iloczyn kartezjański wierszy, jeśli liczba zwróconych wierszy nie jest taka sama (co spowodowałoby całkowite zerwanie).
Postgres 9.4
Z PORZĄDKOŚCIĄ
do generowania numerów wierszy w locie
Możesz użyć Z PORZĄDKOŚCIĄ
aby wygenerować numer wiersza w locie i nie trzeba polegać na parowaniu wyników funkcji SRF w SELECT
lista:
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;
Działa to dla tej samej liczby wierszy z każdej funkcji, a także dla różnych liczb (które zostałyby uznane za niezgodność).
Powiązane:
ROWS FROM
łączyć zestawy wiersz po wierszu
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;
Powiązana odpowiedź:
Na bok:WYKONAJ FORMAT
nie jest ustawioną funkcjonalnością plpgsql. ZWROT ZAPYTANIA
jest. format()
jest po prostu wygodną funkcją do budowania ciągu zapytania, może być używana w dowolnym miejscu w SQL lub plpgsql.