PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgresql:Заявка връща неправилни данни

Вашето WHERE клауза избира редове, където empgroupid е 500 или 501, а не empid където всички 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. Rails 4 Postgresql масив тип данни:актуализиране на стойности

  2. Как pg_sleep_for() работи в PostgreSQL

  3. Пакетът „pgadmin4“ няма кандидат за инсталиране за Ubuntu 20.04

  4. HTTP Статус 500 - java.lang.NoClassDefFoundError:java/time/temporal/TemporalField при стартиране на приложение на OpenShift

  5. Не разбирам как работи nextval() на postgresql, може ли някой да обясни?