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?
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!