Rumah > Artikel > pangkalan data > Mengapa MySQL WHERE IN Saya Melepaskan Baris dengan Berbilang Nilai Padanan?
MySQL WHERE IN Pertanyaan untuk Berbilang Nilai Padanan
Apabila cuba mendapatkan data daripada jadual MySQL menggunakan klausa WHERE IN () untuk dipadankan berbilang nilai, anda mungkin menghadapi masalah di mana baris dengan berbilang nilai padanan tidak dikembalikan. Tingkah laku ini boleh mengelirukan, kerana anda mungkin menjangkakan semua baris dengan mana-mana nilai yang ditentukan akan dikembalikan.
Penjelasan
Klausa WHERE IN () digunakan untuk pilih baris berdasarkan sama ada nilai lajur yang ditetapkan sepadan dengan mana-mana nilai yang disediakan di dalam kurungan. Walau bagaimanapun, apabila baris mempunyai berbilang nilai padanan, seperti kedua-dua 1 dan 3, pertanyaan diterjemahkan kepada satu siri keadaan ATAU:
<code class="sql">SELECT * FROM table WHERE id='1' OR id='2' OR id='3' OR id='4';</code>
Ini bermakna hanya baris yang sepadan dengan tepat satu daripada nilai yang ditentukan akan dikembalikan.
Penyelesaian
Untuk menangani isu ini, anda boleh mempertimbangkan kaedah berikut:
Kaedah 1: Menggunakan Jenis Data SET
Menukar jenis data lajur id kepada SET membolehkan anda menyimpan berbilang nilai dalam satu baris. Anda kemudiannya boleh menggunakan fungsi FIND_IN_SET() untuk membuat pertanyaan bagi baris yang mengandungi nilai tertentu:
<code class="sql">SELECT * FROM table WHERE FIND_IN_SET('1', id);</code>
Pertanyaan ini akan mengembalikan semua baris di mana lajur id mengandungi nilai '1', tanpa mengira kehadiran yang lain nilai.
Kaedah 2: Menggunakan UNION atau Subquery
Pendekatan alternatif ialah menggunakan UNION atau subquery untuk menggabungkan berbilang pertanyaan, setiap satu sepadan dengan satu nilai yang ditentukan:
<code class="sql">SELECT * FROM table WHERE id = 1 UNION SELECT * FROM table WHERE id = 3;</code>
Pertanyaan ini akan mengembalikan semua baris yang sepadan sama ada 1 atau 3, tanpa mengira kehadiran nilai lain.
Atas ialah kandungan terperinci Mengapa MySQL WHERE IN Saya Melepaskan Baris dengan Berbilang Nilai Padanan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!