Rumah >pangkalan data >tutorial mysql >Mengapa MySQL WHERE IN () Tidak Mengembalikan Padanan ID Berbilang Apabila Menggunakan Jenis Data SET?
MySQL WHERE IN () Tidak Mengembalikan Padanan ID Berbilang
Dalam MySQL, klausa WHERE IN () digunakan untuk menapis hasil berdasarkan senarai nilai yang ditentukan. Walau bagaimanapun, apabila lajur jadual mengandungi berbilang nilai, ia mungkin tidak mengembalikan baris yang sepadan dengan semua nilai yang ditentukan.
Pertimbangkan pertanyaan berikut:
SELECT * FROM table WHERE id IN (1, 2, 3, 4);
Pertanyaan ini mendapatkan semula semua baris di mana lajur id adalah bersamaan dengan 1, 2, 3 atau 4. Walau bagaimanapun, jika baris mengandungi lebih daripada satu nilai ini, ia mungkin tidak dikembalikan.
Untuk memahami sebabnya, adalah penting untuk ambil perhatian bahawa IN klausa diterjemahkan kepada keadaan ATAU logik:
SELECT * FROM table WHERE id='1' OR id='2' OR id='3' OR id='4';
Ini bermakna hanya baris yang sepadan dengan tepat satu daripada nilai yang ditentukan akan dikembalikan.
Penyelesaian Menggunakan Jenis Data SET dan FIND_IN_SET
Satu cara untuk menyelesaikan isu ini ialah menukar jenis data lajur id kepada jenis data SET. Dalam lajur SET, berbilang nilai boleh disimpan sebagai senarai dipisahkan koma.
Setelah jenis data ditukar kepada SET, anda boleh menggunakan fungsi FIND_IN_SET untuk mendapatkan semula baris berdasarkan nilai tertentu:
SELECT * FROM table WHERE FIND_IN_SET('1', id);
Pertanyaan ini akan mengembalikan semua baris di mana lajur id mengandungi nilai 1, tidak kira sama ada ia mengandungi nilai lain juga.
Atas ialah kandungan terperinci Mengapa MySQL WHERE IN () Tidak Mengembalikan Padanan ID Berbilang Apabila Menggunakan Jenis Data SET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!