PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

So sánh kết quả của hai hàm bảng bằng cách sử dụng một cột từ mỗi

Tất cả các câu trả lời sau đây giả định rằng các hàng được trả về trong đối sánh đặt hàng.

Postgres 9.3

Với tính năng kỳ quặc là làm nổ các hàng từ các hàm SRF trả về giống nhau số hàng song song:

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!

Các dấu ngoặc đơn xung quanh loại hàng là cần thiết để phân biệt với một tham chiếu bảng có thể có. Chi tiết trong sách hướng dẫn tại đây.

Điều này mặc định là tích số Descartes của các hàng nếu số lượng hàng được trả về không giống nhau (điều này sẽ phá vỡ hoàn toàn đối với bạn).

Postgres 9.4

WITH ORDINALITY để tạo số hàng một cách nhanh chóng

Bạn có thể sử dụng WITH ORDINALITY để tạo một số hàng một cách nhanh chóng và không cần phụ thuộc vào việc ghép nối kết quả của các hàm SRF trong SELECT danh sách:

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;

Điều này hoạt động đối với cùng một số hàng từ mỗi hàm cũng như các số khác nhau (sẽ được tính là không khớp).

Có liên quan:

ROWS FROM để tham gia các tập hợp từng hàng

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;

Câu trả lời liên quan:

Bên cạnh:
EXECUTE FORMAT không phải là một bộ chức năng plpgsql. RETURN QUERY Là. format() chỉ là một hàm thuận tiện để xây dựng một chuỗi truy vấn, có thể được sử dụng ở bất kỳ đâu trong SQL hoặc 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. các chức năng và giao dịch postgres với BEGIN

  2. Kiểm tra xem NULL có tồn tại trong mảng Postgres không

  3. KitchenPC và Ironpython

  4. PostgreSQL psycopg2 Python3.7.4 UnicodeDecodeError:codec 'ascii' không thể giải mã byte

  5. Không thể triển khai đến Heroku vì máy chủ từ chối kết nối