sql >> Database >  >> RDS >> PostgreSQL

Postgresql:Query die onjuiste gegevens retourneert

Uw WHERE clausule selecteert rijen waar empgroupid is 500 of 501, niet empid s waar alle empgroupid s vormen de array [500, 501] .

Je zou een ARRAY_AGG . kunnen gebruiken in de HAVING clausule:

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]

Afhankelijk van waar de [500, 501] array vandaan komt, weet u misschien niet of het zelf is gesorteerd of niet. In dat geval is een "bevat EN bevat door" (operators @> en <@ ) zou ook moeten werken.

#= 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. Activeer een trigger na de update van specifieke kolommen in MySQL

  2. Problemen met de tijdzone van Java MySQL Tijdstempel

  3. Wat is de reden dat de transactiecontext door een andere sessie wordt gebruikt?

  4. Word lid van dezelfde tijdelijke tabel in MySQL