आपका WHERE
क्लॉज उन पंक्तियों का चयन करता है जहां empgroupid
या तो 500 या 501 है, न कि empid
s जहां सभी 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]
. के आधार पर सरणी से आता है, आप यह नहीं जान सकते कि यह स्वयं सॉर्ट किया गया है या नहीं। उस स्थिति में "इसमें शामिल है और इसके द्वारा निहित है" (ऑपरेटर @>
और <@
) भी काम करना चाहिए।
#= 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