PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Postgresql:गलत डेटा लौटाने वाली क्वेरी

आपका 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Linux पर PostgreSQL डेटाबेस डिफ़ॉल्ट स्थान

  2. PostgreSQL में पाठ संपीड़न

  3. मैं Postgresql के लिए AWS RDS में डेटाबेस का नाम कैसे बदल सकता हूँ?

  4. PHP पीडीओ क्वेरी में अब () -अंतराल '2 मिनट' जैसी चीजें कैसे डालें?

  5. ClusterControl के साथ PostgreSQL प्रबंधन और स्वचालन