MySQL如何找到具有精确子集的父级?

But*_*kus 4 mysql sql

MySQL 5.5

父表:
编号 | 事实
子表:
父 ID | 外键 | 事实

现在,我想找到拥有特定一组孩子的父母,不多也不少。就像是:

SELECT t1.`id` 
from `parent_table` t1 
  LEFT JOIN `child_table` t2 ON t1.id=t2.parent_id
WHERE t2.`fk` = 1 
  AND t2.`fk` = 3  
  AND t2.`fk` = 5 
  AND t2.`fk` = 7 
  AND t2.`fk` = 9
Run Code Online (Sandbox Code Playgroud)

但这也会得到这组孩子的父记录:1,2,3,5,7,9。我只想要那些拥有完全相同的孩子的父母:1,3,5,7,9。

有办法吗?

编辑:child.parent_id 和 child.fk都不是唯一的。child.fk 是链接到另一个表的外键。(“多对多关系”)因此,父母很可能有孩子 1,2,3,5,7,9。我执行此查询的全部原因是尝试避免为 1,3,5,7,9 创建新的父级(如果此类父级已存在)。

Joh*_*Woo 5

假设child.id对于每个 来说都是唯一的child.parent_id

SELECT  a.id, a.facts
FROM    parent a
        INNER JOIN child b
            ON a.id = b.parent_ID
WHERE   b.id IN (1,3,5,7,9) AND        -- <<== list all ChildID here
        EXISTS                         -- <<== this part checks if the parent_ID
        (                              --           present on the EXISTS clause
            SELECT  parent_ID          --           which only filters parents
            FROM    child c            --           with 5 children
            WHERE   b.parent_ID = c.parent_ID
            GROUP   BY parent_ID
            HAVING  COUNT(*) = 5       -- <<== total number of children
        )
GROUP   BY a.id, a.facts
HAVING  COUNT(*) = 5                   -- <<== total number of children
Run Code Online (Sandbox Code Playgroud)