首頁  >  文章  >  資料庫  >  如何有效率地選擇MySQL表中屬於多個類別的項目?

如何有效率地選擇MySQL表中屬於多個類別的項目?

Patricia Arquette
Patricia Arquette原創
2024-10-31 04:11:31316瀏覽

How to Efficiently Select Items Belonging to Multiple Categories in a MySQL Table?

識別多個類別中的項目

問題:

在包含關聯資訊中的MySQL 表中(item_id 和category_id),目標是僅選擇指定類別集中的項目。

範例:

給定表格:

+-----------------------+
| item_id | category_id |
+-----------------------+
|   1     |    200      |
|   1     |    201      |
|   1     |    202      |
|   2     |    201      |
|   2     |    202      |
|   3     |    202      |
|   3     |    203      |
|   4     |    201      |
|   4     |    207      |
+-----------------------+

如果傳遞類別ID 201 和202,則查詢應僅傳回項目1 和2 ,因為它們是兩個類別中唯一存在的項目。

解決方案 1:自行-Join

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 = 201 AND c2.category_id = 202

此技術需要建立表的笛卡爾積的自聯接,這對於大型資料集可能效率低。

解決方案2: GROUP BY 和HAVING

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

此解決方案使用GROUP BY 和HAVING 來計算每個項目的類別數,並過濾掉與指定集合匹配的類別。它對於較大的數據集表現更好。

以上是如何有效率地選擇MySQL表中屬於多個類別的項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn