SQL仅选择存在多个关系的行

Lai*_*zer 15 mysql sql select

给定父表"父"

????????????????????????
? 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)