Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Item dengan Pelbagai Nilai Lajur Khusus Merentasi Baris dalam MySQL?

Bagaimana untuk Memilih Item dengan Pelbagai Nilai Lajur Khusus Merentasi Baris dalam MySQL?

DDD
DDDasal
2024-10-28 18:54:02222semak imbas

How to Select Items with Multiple Specific Column Values Across Rows in MySQL?

ID Pilih MySQL Berlaku pada Baris Berbeza dengan Berbilang Nilai Lajur Tertentu

Masalah:

Memilih item daripada jadual bersekutu berdasarkan berbilang nilai yang ditentukan untuk lajur tertentu ialah tugas biasa tetapi mencabar. Sebagai contoh, berdasarkan jadual:

item_id category_id
1 200
1 201
1 202
2 201
2 202
3 202
3 203
4 201
4 207

Matlamatnya adalah untuk memilih item yang berada dalam kedua-dua atau semua kategori yang ditentukan sahaja; sebagai contoh, jika ID kategori 201 dan 202 disediakan, hanya item 1 dan 2 harus dikembalikan.

Penyelesaian:

1. Sertai Sendiri:

Kaedah ini melibatkan penyambungan jadual dengan dirinya sendiri pada lajur item_id:

<code class="sql">SELECT c1.item_id
FROM item_category AS c1
INNER JOIN item_category AS c2 ON c1.item_id = c2.item_id
WHERE c1.category_id IN (201, 202)</code>

Pertanyaan ini mengembalikan set hasil gabungan dengan satu baris untuk setiap pasangan unik baris dalam jadual asal yang memenuhi kriteria category_id.

2. Kumpulan OLEH dan HAVING:

Pendekatan alternatif ialah menggunakan klausa GROUP BY dan HAVING:

<code class="sql">SELECT c.item_id, COUNT(*) AS cat_count
FROM item_category AS c
WHERE c.category_id IN (201, 202)
GROUP BY c.item_id
HAVING cat_count = 2</code>

Pertanyaan ini mengumpulkan baris mengikut item_id dan mengira kejadian ID kategori 201 dan 202 untuk setiap baris. Klausa HAVING menapis baris yang tidak mempunyai bilangan kejadian yang ditentukan (dalam kes ini, 2).

Atas ialah kandungan terperinci Bagaimana untuk Memilih Item dengan Pelbagai Nilai Lajur Khusus Merentasi Baris dalam MySQL?. 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