Rumah  >  Artikel  >  pangkalan data  >  Mengapa MySQL WHERE IN Saya Melepaskan Baris dengan Berbilang Nilai Padanan?

Mengapa MySQL WHERE IN Saya Melepaskan Baris dengan Berbilang Nilai Padanan?

Barbara Streisand
Barbara Streisandasal
2024-11-05 20:29:02402semak imbas

Why Does My MySQL WHERE IN Query Miss Rows with Multiple Matching Values?

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!

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