Rumah >pangkalan data >tutorial mysql >Mengapa MySQL WHERE IN () Tidak Mengembalikan Padanan ID Berbilang Apabila Menggunakan Jenis Data SET?

Mengapa MySQL WHERE IN () Tidak Mengembalikan Padanan ID Berbilang Apabila Menggunakan Jenis Data SET?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-04 17:52:01439semak imbas

Why Doesn't MySQL WHERE IN () Return Multiple ID Matches When Using SET Data Type?

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!

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