一个查询从表A中选择在关系表B中具有两个选项的记录

时间:2011-05-05 18:20:59

标签: mysql sql

我觉得我正在考虑这两个问题,解决方案应该更容易,也许只是其中的一天。

但我有3张桌子

产品

productId    name    
-----------------
1            the
2            name
3            does't
4            matter

选项

optionId    name    
-----------------
1            the
2            name
3            does't
4            matter

product_option

id   productId  optionId  
-------------------------
1    1          1
1    1          3
1    2          4
1    2          1
1    3          1

我想检查productId 1是否包含optionId 1和optionId 3(在本例中为true),这是否可以在单个查询中执行?

3 个答案:

答案 0 :(得分:2)

SELECT P.productId, P.name 
  FROM product AS P 
 WHERE 2 = (SELECT COUNT(*) 
              FROM product_option AS PO 
             INNER 
              JOIN option AS O 
                ON PO.optionId = O.optionId 
               AND PO.productId = P.productId 
               AND O.name IN ('value1', 'value2'));

答案 1 :(得分:2)

SELECT p.productId
    FROM product p
        INNER JOIN product_option po
            ON p.productId = po.productId
                AND po.optionId IN (1,3)
    GROUP BY p.productId
    HAVING COUNT(DISTINCT po.optionId) = 2

答案 2 :(得分:1)

先腮红,试试

之类的东西
Select po1.Id
from Product_Option po1
inner join Product_Option po2 
  on po1.productId = po2.productId 
  and po1.optionId != po2.productId
where po1.optionId = 1
and po2.optionId = 3

这可能不是你需要的,但它是我开始的地方。特别是如果这是一个临时(或不经常使用)的查询。