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

PostgreSQL:Menggunakan pernyataan AND di LEFT JOIN tidak berfungsi seperti yang diharapkan

Kebingungan seputar LEFT JOIN dan WHERE klausa telah diklarifikasi berkali-kali:

pertanyaan menarik This ini tersisa:

Tidak ada petunjuk kueri eksplisit di Postgres. (Yang merupakan masalah perdebatan yang sedang berlangsung.) Tapi masih ada berbagai trik untuk membuat Postgres menekuk jalan Anda.

Tapi pertama-tama, tanyakan pada diri sendiri: Mengapa perencana kueri memperkirakan paket yang dipilih lebih murah untuk memulai? Apakah konfigurasi server Anda pada dasarnya waras? Pengaturan biaya memadai? autovacuum berlari? Versi Postgres kedaluwarsa? Apakah Anda mengatasi masalah mendasar yang harus benar-benar diperbaiki?

Jika Anda memaksa Postgres untuk melakukannya dengan cara Anda sendiri, Anda harus yakin bahwa Postgres tidak akan aktif kembali, setelah peningkatan versi atau pembaruan ke konfigurasi server ... Sebaiknya Anda tahu persis apa yang Anda lakukan.

Yang mengatakan, Anda bisa paksa Postgres untuk "memfilter beberapa catatan sebelum melakukan JOIN " dengan subquery tempat Anda menambahkan OFFSET 0 - yang hanya noise, secara logis, tetapi mencegah Postgres mengatur ulang menjadi bentuk gabungan biasa. (Bagaimanapun juga, petunjuk kueri)

SELECT la.listing_id, la.id, lar.*
FROM  (
   SELECT listing_id, id
   FROM   la
   WHERE  listing_id = 2780
   OFFSET 0
   ) la
LEFT   JOIN lar  ON lar.application_id = la.id;

Atau Anda dapat menggunakan CTE (kurang jelas, tetapi lebih mahal). Atau trik lain seperti mengatur parameter konfigurasi tertentu. Atau, dalam kasus khusus ini, Saya akan menggunakan LATERAL bergabung dengan efek yang sama:

SELECT la.listing_id, la.id, lar.*
FROM   la
LEFT  JOIN LATERAL (
   SELECT *
   FROM   lar
   WHERE  application_id = la.id
   )  lar ON true
WHERE  la.listing_id = 2780;

Terkait:

Berikut adalah blog ekstensif tentang petunjuk Kueri oleh 2ndQuadrant. Berusia lima tahun tetapi masih berlaku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara menggunakan jsonb di rails

  2. PostgreSQL - bagaimana cara membuat tanggal di zona waktu yang berbeda?

  3. Sepuluh Tips untuk Memasuki Produksi Dengan PostgreSQL

  4. Pengaturan pelepasan string PostgreSQL

  5. C# .NET + PostgreSQL