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

Beberapa gabungan kiri pada beberapa tabel dalam satu kueri

Kueri semacam ini seharusnya berfungsi - setelah menulis ulang dengan eksplisit JOIN sintaks:

SELECT something
FROM   master      parent
JOIN   master      child ON child.parent_id = parent.id
LEFT   JOIN second parentdata ON parentdata.id = parent.secondary_id
LEFT   JOIN second childdata ON childdata.id = child.secondary_id
WHERE  parent.parent_id = 'rootID'

Kawat tersandung di sini adalah JOIN yang eksplisit mengikat sebelum "gaya lama" CROSS JOIN dengan koma (, ). Saya mengutip manualnya di sini:

Setelah menulis ulang yang pertama, semua gabungan diterapkan dari kiri ke kanan (secara logika - Postgres bebas untuk mengatur ulang tabel dalam rencana kueri jika tidak) dan berhasil.

Sekadar menegaskan, ini juga akan berhasil:

SELECT something
FROM   master parent
LEFT   JOIN second parentdata ON parentdata.id = parent.secondary_id
,      master child
LEFT   JOIN second childdata ON childdata.id = child.secondary_id
WHERE  child.parent_id = parent.id
AND    parent.parent_id = 'rootID'

Tapi eksplisit JOIN sintaks umumnya lebih disukai, seperti yang diilustrasikan oleh kasus Anda sekali lagi.

Dan perlu diketahui bahwa banyak (LEFT ) JOIN dapat memperbanyak baris:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan tipe untuk fungsi dengan array_agg()

  2. Perbaikan Partisi di PostgreSQL 11

  3. Bagaimana cara saya meminta string dari JSON berdasarkan string lain di dalam JSON di PostgreSQL?

  4. Instalasi / Menjalankan Basis Data Lokal Postgres

  5. Mengalami masalah dalam menggabungkan HAVING dengan WHERE pada QUERY yang sangat sederhana