ホームページ  >  記事  >  データベース  >  行全体で複数の特定の列値を持つ MySQL ID を選択するにはどうすればよいですか?

行全体で複数の特定の列値を持つ MySQL ID を選択するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-30 07:30:27648ブラウズ

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

特定の列値を持つ複数の行にまたがる MySQL ID の選択

特定の列内の 2 つ以上の特定の値を満たす項目を識別するには、 MySQL では挑戦的です。次のテーブル構造を考えてみましょう:

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

目標は、追加のカテゴリに関連付けられている可能性があるにもかかわらず、指定された両方のカテゴリに属する​​項目のみを選択することです。

効果のないソリューション:

  • WHERE category_id = 201 AND category_id = 202: 不可能な条件 (1 行に 2 つの値) を検索するため失敗しました。
  • WHERE category_id = 201 OR category_id = 202: 間違った結果が返されます (両方のカテゴリに属さない項目が含まれます)。

効果的な解決策:

自己結合:

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

このメソッドは、共通の列 (item_id) に基づいて同じテーブルの行を結合し、複数の行とその値の間の比較を可能にします。

GROUP BY:

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 関数を利用して、各 item_id の個別のカテゴリ値の数をカウントします。指定されたカテゴリの数 (この場合は 2) と等しい cat_count を持つ項目が選択されます。

結論:

どちらの方法も、必要な基準を満たす項目を効果的に識別します。 。どちらを選択するかは、特定の要件とデータベースのパフォーマンスに関する考慮事項によって異なります。

以上が行全体で複数の特定の列値を持つ MySQL ID を選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。