sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgresql:Forespørgsel returnerer forkerte data

Din WHERE klausul vælger rækker hvor empgroupid er enten 500 eller 501, ikke empid s hvor alle empgroupid s danner arrayet [500, 501] .

Du kan bruge en ARRAY_AGG i HAVING klausul:

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]

Afhængigt af hvor [500, 501] array kommer fra, ved du måske ikke, om det i sig selv er sorteret eller ej. I så fald en "indeholder OG er indeholdt af" (operatører @> og <@ ) burde også virke.

#= 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. Hvordan konverteres 1985-02-07T00:00:00.000Z (ISO8601) til en datoværdi i Oracle?

  2. Sådan bruges variabler i WHERE-sætning til en SQL SELECT-forespørgsel

  3. Hvordan kan jeg kun tælle NULL-værdier i Oracle/PLSQL?

  4. Udfør rå forespørgsel på MySQL Loopback Connector