0

我有一个项目表。

还有第二张变化表。

每个项目可以有多个变体。

我正在尝试类似的事情:

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.ids 的所有变体.id 值。

我尝试了一堆不同的加入解决方案,但不认为这是要走的路。子查询是答案吗?任何想法将不胜感激。

4

3 回答 3

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
于 2012-04-19T15:16:33.357 回答
0

也许 GROUP_CONCAT(variations.item_id) 将是您的正确选择(参考:http ://dev.mysql.com/doc/refman/5.1/de/group-by-functions.html )?

但我不确定。

于 2012-04-19T15:13:33.047 回答
0

您可以通过使用 count(*) 和 HAVING 来完成,或者在这种情况下,因为只有 3 个条目,可以明确地 JOIN TWICE 以获得预期的变化......

这使用了有/计数并且比使用 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
于 2012-04-19T15:19:28.803 回答