(Полагаю, где вы сказали "Детская Ева ссылается на Еву", вы имели в виду "Детская Ева ссылается на Боба", верно?)
Я думаю, что у меня это есть ... выглядит некрасиво ... секрет в двойном отрицании ... то есть, каждый, для которого это правда, такой же, как никто другой, для которого это ложь ... (хорошо, у меня проблемы с моим английским, но я думаю, вы понимаете, о чем я)
select * from parent
parent_id name
--------------------------------------- --------------------------------------------------
1 alice
2 bob
select * from child
child_id name
--------------------------------------- --------------------------------------------------
1 charlie
2 david
3 eve
select * from parent_child
parent_id child_id
--------------------------------------- ---------------------------------------
1 1
2 1
1 2
2 3
select * from parent p
where not exists(
select * from child c
where
c.child_id in ( 1, 2, 3 ) and
not exists(
select * from parent_child pc where
pc.child_id = c.child_id and
pc.parent_id = p.parent_id
)
)
--when child list = ( 1 )
parent_id name
--------------------------------------- --------------------------------------------------
1 alice
2 bob
--when child list = ( 1, 2 )
parent_id name
--------------------------------------- --------------------------------------------------
1 alice
--when child list = ( 1, 2, 3 )
parent_id name
--------------------------------------- --------------------------------------------------
ну, надеюсь, это поможет ...