Menggunakan Dua KIRI GABUNG atau menggunakan DAN dengan KIRI tunggal GABUNG?

7

Menggunakan dua LEFT JOINs yaitu

SELECT <some columns>
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON <condition1>
LEFT JOIN Table2 AS t3 ON <condition2>

Apakah ini sama dengan menggunakan ANDdalam satu LEFT JOIN? yaitu

SELECT <some columns>
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON <condition1>
AND <condition2>

Keduanya sama atau berbeda (secara umum)?

0x6773
sumber
Itu tergantung pada kebutuhan Anda dan kondisi ON. Jika Anda meletakkan t1.col1 = t2.col1 dengan Table2 dan t1.col1.t3.col1 Itu akan sama.
2
Kueri kedua akan lebih dekat dengan yang pertama dalam hal hasil jika ia menggunakan ATAU alih-alih DAN, tetapi masih akan menjadi kueri yang berbeda secara umum .
Andriy M
Coba gunakan Menjelaskan rencana untuk melihat perbedaannya :)
Arnab Datta
@RajeshRanjan tidak, mereka tidak akan setara, bahkan dalam kasus itu.
ypercubeᵀᴹ

Jawaban:

13

Mereka berbeda. Di opsi pertama Anda mendapatkan 2 kali Table2ke permintaan Anda. Sekali t2dan sekali sebagai t3. Keduanya memiliki konten yang berbeda dan Anda harus memasangnya kembali. Bagi saya ini lebih merupakan OR daripada AND . Di opsi kedua Anda hanya mendapatkan Table2baris yang memenuhi kedua kriteria.

Misalkan Anda memiliki Table2konten berikut:

| Color | Size |
|-------|------|
| Red   |  S   |
| Blue  |  S   |
| Blue  |  XS  |

Misalkan Anda ingin memiliki baris yang sedang Bluedan S. Dalam opsi pertama Anda, Anda mendapatkan semua baris ( t2misalnya dengan semua Bluedan t3dengan semua S) dan dalam opsi kedua Anda, Anda hanya mendapatkan baris 2.

Marco
sumber
4
Tidak hanya itu, tetapi karena ini adalah tentang menggabungkan bagian luar tabel dua kali, Anda juga akan mendapatkan produk mini-Cartesian dengan permintaan pertama. Maksud saya, sebuah Table1baris menginginkan warna biru dan ukuran S. Jadi, gabungan pertama memberikan dua Table2kecocokan, sehingga menduplikasi Table1baris, dan gabungan kedua memberikan dua kecocokan untuk setiap salinan, sehingga menghasilkan total empat baris.
Andriy M