Semak sama ada Lajur Mengandungi SEMUA Nilai Lajur Lain dalam Pangkalan Data MySQL
Pertimbangkan dua jadual, T1 dan T2, dengan yang berikut struktur:
T1:
personID | stuffID |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
1 | 4 |
2 | 1 |
2 | 4 |
3 | 1 |
3 | 2 |
T2:
stuffID |
---|
1 |
2 |
3 |
Matlamatnya adalah untuk mendapatkan semua nilai personID daripada T1 yang dikaitkan dengan setiap nilai stuffID dalam T2. Untuk contoh ini, hasilnya ialah 1 kerana hanya personID 1 yang mempunyai rekod untuk ketiga-tiga stuffID yang terdapat dalam T2.
Penyelesaian:
Untuk mencapai ini, kita boleh menggunakan proses dua langkah:
Langkah 1: Kenal pasti padanan rekod
SELECT personID FROM T1 WHERE stuffID IN (SELECT stuffID FROM T2)
Subkueri ini mendapatkan semula semua nilai personID daripada T1 yang mempunyai sekurang-kurangnya satu stuffID yang sepadan dalam T2.
Langkah 2: Semak kesempurnaan
GROUP BY personID HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM T2)
Bahagian ini mengumpulkan hasil daripada Langkah 1 mengikut personID dan menyemak sama ada kiraan berbeza nilai stuffID untuk setiap kumpulan adalah sama dengan bilangan nilai stuffID dalam T2. Jika ya, ini menunjukkan bahawa personID dikaitkan dengan semua nilai stuffID daripada T2.
Pertanyaan Akhir:
Menggabungkan kedua-dua langkah, pertanyaan terakhir untuk menyemak sama ada lajur mengandungi semua nilai lajur lain dalam MySQL ialah:
SELECT personID FROM T1 WHERE stuffID IN (SELECT stuffID FROM T2) GROUP BY personID HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM T2)
Atas ialah kandungan terperinci Bagaimana untuk Semak sama ada Lajur MySQL Mengandungi Semua Nilai dari Lajur Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!