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

Barbara Streisand
Lepaskan: 2024-11-05 20:29:02
asal
422 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!