我有以下包裹和产品之间的关联表(简化):
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 中解决这个问题,但由于我试图深入查询,我想知道这是如何完成的。
最佳答案
这叫做关系划分
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)
或
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)
关于MySQL:从具有特定关联的关联表中获取 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14952187/