PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bandingkan hasil dari dua fungsi tabel menggunakan satu kolom dari masing-masing

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan Heroku PostgreSQL GROUP_BY di aplikasi Rails

  2. Kesalahan:EXDEV:tautan lintas perangkat tidak diizinkan, ganti nama '/tmp/ di Ubuntu 16.04 LTS

  3. PostgreSQL:Nonaktifkan koneksi untuk sementara

  4. Izin dump Postgresql ditolak

  5. Atur Urutan Dengan untuk mengabaikan tanda baca per kolom