PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Сравнете резултата от две таблични функции, като използвате по една колона от всяка

Всички следващи отговори предполагат, че редовете се връщат при съвпадение поръчка.

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разлика между времеви отпечатъци с/без часова зона в PostgreSQL

  2. Как да свързвам SQL променливи в PHP?

  3. Как работи функцията Ln() в PostgreSQL

  4. Рекурсивен JSONB postgres

  5. Нечувствителен към регистър като (ilike) в Datamapper с Postgresql