Apabila bekerja dengan berbilang jadual, selalunya menjadi perlu untuk mencari rekod yang sepadan dengan kriteria tertentu merentas berbilang medan . Dalam senario ini, anda ingin mencari rekod di mana medan nama pertama dan nama keluarga sepadan dengan nilai tertentu dalam jadual lain.
Satu pendekatan ialah menggunakan arahan INTERSECT, seperti yang dilihat dalam contoh pertanyaan SQL anda. Walau bagaimanapun, MySQL tidak menyokong INTERSECT. Sebaliknya, terdapat kaedah alternatif untuk mencapai hasil yang diingini.
INNER JOIN boleh digunakan untuk menapis rekod yang mempunyai baris yang sepadan dalam jadual lain. Dalam kes anda, anda boleh menggunakan pertanyaan berikut:
SELECT DISTINCT records.id FROM records INNER JOIN data d1 ON d1.id = records.firstname AND d1.value = "john" INNER JOIN data d2 ON d2.id = records.lastname AND d2.value = "smith"
Pertanyaan ini akan mengembalikan ID unik rekod yang memenuhi kedua-dua syarat.
Satu lagi alternatif ialah menggunakan klausa IN untuk menapis nilai yang wujud dalam subkueri:
SELECT DISTINCT records.id FROM records WHERE records.firstname IN ( SELECT id FROM data WHERE value = 'john' ) AND records.lastname IN ( SELECT id FROM data WHERE value = 'smith' )
Pertanyaan ini akan kembalikan hasil yang sama seperti pertanyaan INNER JOIN dengan memilih rekod yang mana nilai nama pertama dan nama keluarga sepadan dengan nilai yang ditentukan dalam subkueri.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Rekod Padanan Merentasi Berbilang Jadual dalam MySQL Tanpa Menggunakan INTERSECT?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!