mysql连接,分组数据和比较?

时间:2012-04-19 14:58:58

标签: mysql join subquery

我有一张物品表。

第二个变化表。

每件商品可能有多种变化。

我正在尝试类似的事情:

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值。

我尝试了一堆不同的连接解决方​​案,但不认为这是可行的方法。子查询是答案吗?任何想法都会受到很大的赞赏。

3 个答案:

答案 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