Объединение трех таблиц по повторяющимся строкам

Рейтинг: 1Ответов: 1Опубликовано: 31.03.2023

У меня есть таблица 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

Ответы

▲ 0
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 )