9

次のように、2 つのテーブル間のジャンクションを作成するテーブルがあるとします。

id_product | id_category
-----------------
11 | 22
11 | 33
12 | 22
12 | 33

検索されたカテゴリ ID のリストに従って id_products (個別) を取得したい。

IN() 句を使用すると、id_categories のリストで論理 OR が使用されます。

送信された id_categ のリストに対して論理 AND を持つように SELECT クエリを作成するにはどうすればよいですか??

例: カテゴリ 22と33に属するすべての id_products (および、5 つ以上のカテゴリ ID) が必要です。

私はこの答えを見つけました: MySQL IN句をオールインクルーシブとして使用する(ORではなくAND) ...しかし、クエリは複数のテーブルを混合しています...単一のテーブル、ジャンクションテーブルでのみクエリが必要です。

4

2 に答える 2

10

あなたのリンクを読んで、私はそれが次のようなものになると思います

select id_product 
from yourTable
where id_category in (--your List goes Here)
group by id_product 
having count(distinct id_category) = NumberOfElementsOfYourList

そのid_categoryを取得したいだけで、他のid_categoryを取得したくない場合は、=を使用する必要があります。そうでない場合は、>=を使用します

于 2012-08-15T20:18:44.160 に答える
1
select id_product
from your_table
where id_category in (22, 33)
group by id_product
having count(distinct id_category) = 2

having見つかったものをカウントする句を追加できますid_category。たとえば、5つのIDを探す場合 は、句の2inを変更する必要があります。5having

于 2012-08-15T20:18:58.793 に答える