给定父表"父"
????????????????????????
? PARENT_ID ? NAME ?
????????????????????????
? 1 ? bob ?
? 2 ? carol ?
? 3 ? stew ?
????????????????????????
Run Code Online (Sandbox Code Playgroud)
和父和一个(这里未指定的)属性表之间的多对多关系表'rel'
?????????????????????????
? PARENT_ID ? PROP_ID ?
?????????????????????????
? 1 ? 5 ?
? 1 ? 1 ?
? 2 ? 5 ?
? 2 ? 4 ?
? 2 ? 1 ?
? 3 ? 1 ?
? 3 ? 3 ?
?????????????????????????
Run Code Online (Sandbox Code Playgroud)
如何选择所有具有所有指定关系的父母?例如,使用样本数据,我如何找到具有属性5和1的所有父母?
编辑:相同的问题但需要完全匹配: SQL仅选择存在完全多个关系的行
Joh*_*Woo 18
这称为关系部门
SELECT a.name
FROM parent a
INNER JOIN rel b
ON a.parent_ID = b.parent_ID
WHERE b.prop_id IN (1,5)
GROUP BY a.name
HAVING COUNT(*) = 2
Run Code Online (Sandbox Code Playgroud)
更新1
如果唯一约束并没有强制执行的prop_id每一个parent_id,DISTINCT需要在这种情况下.
SELECT a.name
FROM parent a
INNER JOIN rel b
ON a.parent_ID = b.parent_ID
WHERE b.prop_id IN (1,5)
GROUP BY a.name
HAVING COUNT(DISTINCT b.prop_id) = 2
Run Code Online (Sandbox Code Playgroud)