mysql - SQL 仅选择存在确切多个关系的行

标签 mysql sql

这与this question密切相关, 但增加了另一个要求。

给定父表'parent'

╔════════════╦════════╗
║ PARENT_ID  ║ NAME   ║
╠════════════╬════════╣
║         1  ║ bob    ║
║         2  ║ carol  ║
║         3  ║ stew   ║
╚════════════╩════════╝

以及父级和(此处未指定)属性表之间的多对多关系表“rel”

╔════════════╦══════════╗
║ PARENT_ID  ║ PROP_ID  ║
╠════════════╬══════════╣
║         1  ║       5  ║
║         1  ║       1  ║
║         2  ║       5  ║
║         2  ║       4  ║
║         2  ║       1  ║
║         3  ║       1  ║
║         3  ║       3  ║
╚════════════╩══════════╝

我如何选择具有所有一组指定关系的所有 parent ?例如。使用示例数据,我如何才能找到与属性 5 和 1 有关系的所有 parent ?

最佳答案

SELECT PARENT_ID
FROM rel
GROUP BY PARENT_ID
HAVING SUM(PROP_ID NOT IN (5,1)) = 0
   AND SUM(PROP_ID = 1) = 1 
   AND SUM(PROP_ID = 5) = 1

关于mysql - SQL 仅选择存在确切多个关系的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14113267/

相关文章:

mysql - 在 MySQL 表中排序更新历史

sql - 如何为这种情况编写查询

SQL 查询 - 返回连接表的前两条记录的连接

c# - 序列化和散列

php - 迁移后,时间戳 < 1 上的 MySQL 查询停止工作

php - MySQL 默认 date() + 14 天,对于一个列?

mysql查询更新所有值+1,其中值小于100

MySQL Group By 和 Order By 一起使用

sql - 有没有办法从 SQL 中的日期中减去天数?

php - 将查询结果转换为二维数组