PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgresql:Permintaan mengembalikan data yang salah

WHERE . Anda klausa memilih baris di mana empgroupid adalah 500 atau 501, bukan empid s di mana semua empgroupid s membentuk larik [500, 501] .

Anda dapat menggunakan ARRAY_AGG di HAVING klausa:

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]

Tergantung di mana [500, 501] array berasal, Anda mungkin tidak tahu apakah itu sendiri diurutkan atau tidak. Dalam hal ini "berisi DAN ditampung oleh" (operator @> dan <@ ) harus bekerja juga.

#= 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. Terjadi kesalahan saat membaca data dari penyedia. Sertifikat jarak jauh tidak valid menurut prosedur validasi

  2. ProgrammingError:kesalahan sintaks pada atau di dekat saat menjalankan kueri dengan python menggunakan psycopg2

  3. Postgres 9.4 jsonb array sebagai tabel

  4. Buat json dengan nilai kolom sebagai kunci objek

  5. Tanggal PostgreSQL() dengan zona waktu