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

标签 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 中解决这个问题,但由于我试图深入查询,我想知道这是如何完成的。

最佳答案

这叫做关系划分

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/

相关文章:

php - 使用 php 将 mysql 表导出到 csv(不选择输出文件)

mysql - 在 MySQL 的同一个查询中使用同一个子查询 2 次

sql - ClickHouse:如何以正确的方式存储 JSON 数据?

sql - 在 SQL SERVER 的 UPDATE 语句中使用 CASE 选择 SET 的列

MySQL,选择,比较两个表中的值

php - 根据第 3 个表的计数从 2 个表中选择

mysql - SSIS - 设置 MySQL 连接管理器(具有 SSH 隧道)

sql - oracle sql developer 编辑字段

mysql - 如何在 SQL Server 中使用计数查找百分比

sql - MySQL SELECT 与 join、count、order by