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 创建新的父级(如果此类父级已存在)。
假设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)