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

Bagaimana cara menggabungkan bilangan bulat di postgresql?

Ekspresi select array_agg(4) mengembalikan set baris (sebenarnya set baris dengan 1 baris). Oleh karena itu permintaan

select *
from b
where b.id = any (select array_agg(4))  -- ERROR

mencoba membandingkan bilangan bulat (b.id) dengan nilai baris (yang memiliki 1 kolom bertipe integer[]). Ini menimbulkan kesalahan.

Untuk memperbaikinya, Anda harus menggunakan subquery yang mengembalikan bilangan bulat (bukan larik bilangan bulat):

select *
from b
where b.id = any (select unnest(array_agg(4)))

Atau, Anda dapat menempatkan nama kolom dari hasil select array_agg(4) sebagai argumen dari any , misalnya:

select *
from b
cross join (select array_agg(4)) agg(arr)
where b.id = any (arr)

atau

with agg as (
    select array_agg(4) as arr)
select *
    from b
    cross join agg
    where b.id = any (arr)

Secara lebih formal, dua kueri pertama menggunakan ANY dalam bentuk:

expression operator ANY (subquery)

dan dua lainnya menggunakan

expression operator ANY (array expression)

seperti yang dijelaskan dalam dokumentasi:9.22.4. APAPUN/BEBERAPA dan 9.23.3. APAPUN/BEBERAPA (array) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Salin data Tabel dari satu DB ke yang lain

  2. Nilai agregat selama rentang jam, setiap jam

  3. Bagaimana memetakan bidang array PostgreSQL di Django ORM

  4. Perbarui beberapa kolom yang dimulai dengan string tertentu

  5. Tabel dalam memori di PostgreSQL