Всички следващи отговори предполагат, че редовете се връщат при съвпадение поръчка.
Postgres 9.3
Със странната характеристика на експлодиращи редове от SRF функции, връщащи същото брой паралелни редове:
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!
Скобите около типа ред са необходими, за да се разграничи от възможна препратка към таблица. Подробности в ръководството тук.
Това по подразбиране е декартово произведение на редове, ако броят на върнатите редове не е същият (което би го развалило напълно за вас).
Postgres 9.4
С ОРДИНАЛНОСТ
за генериране на номера на редове в движение
Можете да използвате WITH ORDINALITY
за генериране на номер на ред в движение и не е необходимо да зависи от сдвояването на резултата от SRF функции в SELECT
списък:
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;
Това работи за един и същ брой редове от всяка функция, както и за различни числа (които биха се считали за несъответствие).
Свързани:
РЕДОВЕ ОТкод>
за съединяване на комплекти ред по ред
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;
Свързан отговор:
Отстрани:ИЗПЪЛНЕНИЕ НА ФОРМАТ
не е зададена функционалност на plpgsql. ВРЪЩАНЕ НА ЗАЯВКА
е. format()
е просто удобна функция за изграждане на низ на заявка, може да се използва навсякъде в SQL или plpgsql.