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

Meratakan relasi dengan array untuk memancarkan satu baris per entri array

Kita dapat menempatkan fungsi pengembalian set unnest() ke dalam SELECT daftar seperti yang disarankan Raphaël . Ini digunakan untuk menunjukkan masalah kasus sudut sebelum Postgres 10. Lihat:

Sejak Postgres 9.3 kita juga dapat menggunakan LATERAL bergabung untuk ini. Ini adalah cara yang lebih bersih dan sesuai standar untuk menempatkan fungsi pengembalian-set ke dalam FROM daftar, bukan ke dalam SELECT daftar:

SELECT name, value
FROM   tbl, unnest(values) value;  -- implicit CROSS JOIN LATERAL

Satu perbedaan halus:ini menjatuhkan baris dengan values kosong / NULL dari hasil sejak unnest() mengembalikan tidak ada baris , sedangkan yang sama dikonversi ke nilai NULL di FROM daftar dan tetap kembali. Kueri yang setara 100% adalah:

SELECT t.name, v.value
FROM   tbl t
LEFT   JOIN unnest(t.values) v(value) ON true;

Lihat:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Temukan id orang tua ketika semua anak berbagi nilai yang sama

  2. Pembagian PostgreSQL dengan nol saat memesan

  3. Perlu dua indeks pada tabel gabungan HABTM?

  4. Kondisi berhenti CTE rekursif untuk loop

  5. Perbedaan antara dua tanggal di postgresql