Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menyertai Jadual Yang Sama Dua Kali dalam SQL dengan Cekap untuk Mendapatkan Data daripada Berbilang Syarat Sertai?

Bagaimanakah Saya Boleh Menyertai Jadual Yang Sama Dua Kali dalam SQL dengan Cekap untuk Mendapatkan Data daripada Berbilang Syarat Sertai?

Patricia Arquette
Patricia Arquetteasal
2025-01-07 07:32:40931semak imbas

How Can I Efficiently Join the Same Table Twice in SQL to Retrieve Data from Multiple Join Conditions?

Menyertai Jadual Yang Sama Dua Kali: Penerokaan Komprehensif

Dalam perbincangan ini, kami menangani dilema biasa yang dihadapi oleh pembangun: dengan cekap menyertai perkara yang sama meja beberapa kali. Cabarannya terletak pada mendapatkan set hasil yang merangkumi data daripada kedua-dua syarat penyertaan.

Pertimbangkan struktur jadual berikut:

*Table1*
ID
PhoneNumber1
PhoneNumber2

*Table2*
PhoneNumber
SomeOtherField

Matlamatnya adalah untuk mendapatkan PhoneNumber1, SomeOtherField yang sepadan dengan PhoneNumber1, PhoneNumber2 , dan SomeOtherField yang sepadan dengan Nombor Telefon2.

Kaedah 1: Cantuman Jadual Berbilang

Pendekatan ini melibatkan pencantuman di atas meja dua kali:

SELECT t1.PhoneNumber1, t1.PhoneNumber2, 
   t2.SomeOtherFieldForPhone1, t3.someOtherFieldForPhone2
FROM Table1 t1
INNER JOIN Table2 t2
   ON t2.PhoneNumber = t1.PhoneNumber1
INNER JOIN Table2 t3
   ON t3.PhoneNumber = t1.PhoneNumber2

Kaedah ini boleh dipercayai tetapi kelihatan sedikit bertele-tele.

Kaedah 2: Berasaskan ATAU Menyertai

Dalam percubaan untuk memudahkan pertanyaan, pembangun mencadangkan menggunakan klausa OR dalam keadaan ON:

SELECT ...
FROM Table1
INNER JOIN Table2 
   ON Table1.PhoneNumber1 = Table2.PhoneNumber OR
      Table1.PhoneNumber2 = Table2.PhoneNumber

Walau bagaimanapun, pendekatan ini tidak sah dalam SQL dan akan mengakibatkan ralat.

Amalan Terbaik

Dalam hal ini senario, Kaedah 1 disyorkan kerana kejelasan dan kebolehpercayaannya. Adalah penting untuk ambil perhatian bahawa pemfaktoran semula jadual untuk mengelak daripada menggunakan kekunci semula jadi, seperti nombor telefon, adalah sangat disyorkan. Kekunci semula jadi terdedah kepada perubahan, membawa kepada proses penyelenggaraan yang mencabar.

Apabila menyertai jadual yang sama beberapa kali, pengalianan adalah penting untuk kebolehbacaan dan kemudahan pemahaman. Alias ​​membantu membezakan antara berbilang kejadian jadual.

Berikut ialah versi Kaedah 1 yang dioptimumkan:

SELECT t.PhoneNumber1, t.PhoneNumber2, 
   t1.SomeOtherFieldForPhone1, t2.someOtherFieldForPhone2
FROM Table1 t
JOIN Table2 t1 ON t1.PhoneNumber = t.PhoneNumber1
JOIN Table2 t2 ON t2.PhoneNumber = t.PhoneNumber2

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyertai Jadual Yang Sama Dua Kali dalam SQL dengan Cekap untuk Mendapatkan Data daripada Berbilang Syarat Sertai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn