1

属性に基づくフィルターを作成しようとしています。これはマルチフィルターであることが想定されます。

私のテーブルは次のようになります。

product_id  attribute_id  attribute_option_id
----------  ------------  -------------------
4           16            51
4           13            28
5           16            51
6           16            51

attribute_option_id 51 を選択すると、product_id 4、5、および 6 が取得されます。attribute_option_id 51 および 28 を選択すると、product_id 4、5、および 6 が取得されます。これは望ましくない結果です。この場合、product_id 4 のみが必要です。この行でこれを解決できると考えました。

WHERE product_attribute.Attribute_option_id IN ('51 ', '28')

しかし、これが解決策ではないことは予想されていました。

誰かがこれで私を助けることができますか?

4

2 に答える 2

4
select a.product_id from (
  select product_id, count(*) as cnt 
  from mytable
  where attribute_option_id in (51, 28)
  group by product_id having count(*) =2) a

トリックを行う必要があります。

于 2012-05-25T11:44:52.340 に答える
1
SELECT * 
FROM   mytable 
WHERE  product_id IN (SELECT a.product_id 
                      FROM   mytable a 
                             INNER JOIN mytable b 
                               ON a.product_id = b.product_id 
                      WHERE  a.attribute_option_id = '51' 
                             AND b.attribute_option_id = '28') 
于 2012-05-25T11:46:53.427 に答える