MySQL:从关联表中获取具有特定关联的id

时间:2013-02-19 07:38:24

标签: mysql sql select

我在包和产品之间有了以下关联表(简化):

package_id     product_id    count
1              1             6
1              2             1
1              3             1
2              1             6
2              2             1
3              1             6
4              1             8
4              2             1

我正在尝试研究如何创建一个能够选择特定package_id的查询,其中包含我提供的产品及其数量。因此,如果我要查找包含(product_id = 1 AND count = 6) AND (product_id = 2 AND count = 1)的包,则返回package_id 2而不是其他包,因为其中包含其他产品和/或其他计数。

我很乐意在我的代码(PHP)而不是SQL中解决这个问题,但是因为我试图深入了解查询,所以我想知道这是如何完成的。

1 个答案:

答案 0 :(得分:1)

这称为Relational Division

SELECT  a.package_ID
FROM    tableName a
WHERE   (a.product_ID = 1 AND a.count = 6) OR
        (a.product_ID = 2 AND a.count = 1)
GROUP   BY a.package_ID
HAVING  COUNT(*) = 2 AND
        COUNT(*) = (SELECT COUNT(*) FROM tableName WHERE package_ID = a.package_ID)

OR

SELECT  package_ID
FROM    tableName
WHERE   (product_ID, `count`) in ((1, 6), (2, 1))
GROUP   BY package_ID
HAVING  COUNT(DISTINCT product_ID, `count`) = 2 AND
        COUNT(*) = (SELECT COUNT(*) FROM tableName WHERE package_ID = a.package_ID)