あなたのWHERE
句は、empgroupid
が存在する行を選択します empid
ではなく500または501のいずれかです ■すべてのempgroupid
s配列を形成する[500, 501]
。
ARRAY_AGG
を使用できます HAVING
で 条項:
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]
[500, 501]
の場所によって異なります 配列はから来ているので、それ自体がソートされているかどうかわからない場合があります。その場合、「含むANDが含まれる」(演算子@>
および<@
)も機能するはずです。
#= 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