我有一张物品表。
第二个变化表。
每件商品可能有多种变化。
我正在尝试类似的事情:
SELECT items.*, variations.id from items
JOIN variations
ON variations.item_id = items.id
WHERE variations.id IN (23,25,29)
GROUP BY items.id
哪会有任何具有以上所有变体的项目,23,25和29。
我还需要返回返回的item.id的所有variables.id值。
我尝试了一堆不同的连接解决方案,但不认为这是可行的方法。子查询是答案吗?任何想法都会受到很大的赞赏。
答案 0 :(得分:1)
SELECT i.*, v.id
FROM items i
JOIN variations v
ON v.item_id = i.id
WHERE (
SELECT COUNT(DISTINCT vi.id)
FROM variations vi
WHERE vi.item_id = i.id
AND vi.id IN (23, 25, 29)
) = 3
答案 1 :(得分:0)
也许GROUP_CONCAT(variations.item_id)将是您的正确选择(参考:http://dev.mysql.com/doc/refman/5.1/de/group-by-functions.html)?
但我不确定。
答案 2 :(得分:0)
您可以使用计数(*)和HAVING,或者在这种情况下,因为只有3个条目,可以明确地为预期变化加入TWICE ......
这使用has / count并且比使用WHERE IN(SUBSELECT)更有效。它使用ONE查询对所有项目进行首选,然后将该结果连接到项目。
select i.*
from
( select v.item_id
from variations v
where v.id in ( 23, 25, 29 )
group by v.item_id
having count(*) = 3 ) PreQualified
JOIN Items i
on PreQualified.Item_ID = i.id