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

Postgresql:Truy vấn trả về dữ liệu không chính xác

WHERE của bạn mệnh đề chọn các hàng trong đó empgroupid là 500 hoặc 501, không phải là empid s nơi chứa tất cả empgroupid s tạo thành mảng [500, 501] .

Bạn có thể sử dụng ARRAY_AGG trong HAVING mệnh đề:

SELECT empid 
FROM empgroupinfo 
GROUP BY empid
-- ORDER BY clause here is important, as array equality checks elements position by position, not just 'same elements as'
HAVING ARRAY_AGG(DISTINCT empgroupid ORDER BY empgroupid) = ARRAY[500, 501]

Tùy thuộc vào nơi [500, 501] mảng đến từ đâu, bạn có thể không biết liệu bản thân nó có được sắp xếp hay không. Trong trường hợp đó, một "chứa AND được chứa bởi" (các toán tử @><@ ) cũng nên hoạt động.

#= CREATE TABLE empgroupinfo (empid int, empgroupid int);
CREATE TABLE
Time: 10,765 ms

#= INSERT INTO empgroupinfo VALUES (1, 500), (1, 501), (2, 500), (2, 501), (2, 502);
INSERT 0 5
Time: 1,451 ms

#= SELECT empid 
   FROM empgroupinfo 
   GROUP BY empid
   HAVING ARRAY_AGG(empgroupid ORDER BY empgroupid) = ARRAY[500, 501];
┌───────┐
│ empid │
├───────┤
│     1 │
└───────┘
(1 row)

Time: 0,468 ms


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tùy chọn thực tế hiện đại cho tìm kiếm Django với Postgres? Cần nhiều tiêu chí, nhưng icontains quá kém hiệu quả

  2. Db khác nhau để thử nghiệm trong Django?

  3. Rails Migration:Bigint trên PostgreSQL dường như không thành công?

  4. Kiểm tra các mục tiêu thống kê trong PostgreSQL

  5. Tác nhân PostgreSQL trong ủy ban tiêu chuẩn SQL một lần nữa