2017-07-16 6 views
0

2プライマリ・テーブルがある場合、多くの選択:上のテーブルを結合する

製品

  • ID

フィルタ

    は、
  • ID

そして、もう一つの接続テーブル

product_filter

  • は、私たちが言う
  • filter_id

をPRODUCT_IDいくつかの製品といくつかのフィルターがあります。そして、私たちはid 1を持つ1つの特別な製品を持っています。これらのフィルタの名前はids1と2の白黒です。つまり、(product_id:1、filter_id:2)、(product_id:1、filter_id:2)の2つのフィールドがあります。私はその製品を選択したい。

私が試したこと。まず、where or節を試しました:select * from products join product_filter on product_filter.product_id = products.id join filters on filters.id = product_filter.filter_id where filters.name = "black" or filters.name = "white"。しかし、この選択製品には、黒または唯一の白フィルタだけがあります。 orの代わりにand節を使用すると、何も選択されません。

+0

のように通常のソリューションは、IN()、GROUP BY、HAVING、およびCOUNTを含み、この場合、二回filtersテーブルに参加できます – Strawberry

答えて

2

あなたは

select * from products 
join product_filter on product_filter.product_id = products.id 
join filters on filters.id = product_filter.filter_id 
join filters fl on fl.id = product_filter.filter_id 
where filters.name = 'black' 
and fl.name = 'white'; 
関連する問題