sql >> Databáze >  >> RDS >> PostgreSQL

Postgresql:Dotaz vrací nesprávná data

Vaše WHERE klauzule vybere řádky, kde je empgroupid je buď 500 nebo 501, nikoli empid s kde všechny empgroupid s tvoří pole [500, 501] .

Můžete použít ARRAY_AGG v HAVING klauzule:

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]

Podle toho, kde je [500, 501] pole pochází, možná nevíte, zda je samo seřazeno nebo ne. V takovém případě „obsahuje AND je obsaženo“ (operátory @> a <@ ) by také mělo fungovat.

#= 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. Kolik dotazů je příliš mnoho?

  2. Chyba náhledu šablony BI Publisher a Excel

  3. Volání členské funkce exec() při neobjektové chybě v PHP

  4. Oracle POKUD existuje PAK, JINAK