あなたWHERE
句はempgroupid
が500または501のいずれかである行、すべてのempgroupid
sが配列[500, 501]
を形成していないempid
秒を選択します。
あなたはHAVING
句でARRAY_AGG
を使用することができます。
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
@BunkerBoy:私はあなたの編集を理解していないのですか? 'empId = 102'が必要でない場合は、' WHERE empId <> 102'をクエリに追加してください。 – Marth
申し訳ありません私はempidについて間違いを犯しました!= 102今はおかげで修正されました。それは私のために働いてくれました.. –
私のgroupidが400と345ならば、私は配列をascオーダークエリによると? –