我觉得我正在考虑这两个问题,解决方案应该更容易,也许只是其中的一天。
但我有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),这是否可以在单个查询中执行?
答案 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
这可能不是你需要的,但它是我开始的地方。特别是如果这是一个临时(或不经常使用)的查询。