一个查询从表A中选择一个在关系表B中有两个选项的记录
问题描述:
我觉得我在考虑这两个问题,解决方案应该更简单,也许它只是那些日子中的一个。一个查询从表A中选择一个在关系表B中有两个选项的记录
但我有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),这是否可以在单个查询中执行?
答
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'));
答
乍一看,你可以试试
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
这也许不是很需要的东西,但它是在那里我将开始。特别是如果这是一个临时(或不经常使用)的查询。
答
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
+0
这也帮助我得到了我的最终查询,谢谢! +1 – Patcouch22 2011-05-05 20:11:40
好的答案:)我在同一条路上,但是它被过度工程化为一个UDF。 – Bueller 2011-05-05 18:29:36
非常感谢! – Patcouch22 2011-05-05 20:11:11