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ử @>
và <@
) 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