MySQL 選擇具有多個特定列值的不同行上出現的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。自連接:
此方法涉及在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>
此查詢傳回一個連接結果集,其中每個唯一的對都包含一行原始表中滿足category_id條件的行。
2. Group BY 和HAVING:
另一個方法是使用GROUP BY 和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>
此按item_id 將行分組,並計算類別ID 的出現次數每行201 和202。 HAVING 子句過濾掉那些沒有指定出現次數(在本例中為 2)的行。
以上是如何在 MySQL 中跨行選擇具有多個特定列值的項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!