Объединение трех таблиц по повторяющимся строкам
У меня есть таблица Parent с перечнем родителей в столбце ParentId, таблица Children с перечнем детей в столбце ChilId и таблица ParentChildren с их отношением (id, ChildId, ParentId). У некоторых детей в таблице Parent оба родителя, также среди них есть братья-сестры.
Мне нужно получить таблицу, в которой будут перечислены родители-супруги, имеющие двух и более детей. Получается, если в семье два ребенка, то на каждого будет по два родителя, итого два ребенка=4 строки с родителями. Помогите составить Join, пожалуйста
Так у меня получилось выгрузить повторяющиеся id детей, но эта выборка дает только отношение один ребенок-два родителя, а нужно два ребенка-два родителя(по строкам получится как бы 4 родителя):
SELECT *
FROM ParentChildren
WHERE ChildId IN (
SELECT childId FROM ParentChidren
GROUP BY ChildId HAVING COUNT(*) > 1)
ORDER BY ParentId
Ответы (1 шт):
SELECT * FROM ParentChildren P1 -- найти все пары ребёнок-родитель
WHERE EXISTS -- где у родителя ребёнка есть ещё ребёнок
(SELECT childId FROM ParentChildren P2
WHERE P2.childId != P1.childId AND P2.ParentId = P1.ParentId )
AND EXISTS -- и у ребёнка родителя есть второй родитель
(SELECT ParentId FROM ParentChildren P3
WHERE P3.childId = P1.childId AND P3.ParentId != P1.ParentId )