2015-12-13 2 views
1

У меня есть таблица под названием «child_parent», в которой перечислены идентификаторы детей и их родителей, ссылаясь, скажем, на таблицу «человек». Родительско-родительская пара уникальна, и у ребенка может быть не более двух родителей.родословная-родительская генерация - таблица другого родителя

child parent 
3  1 
3  2 
4  1 
7  8 

Я хочу, чтобы таблица «другой» родителя (назовем его «ChildOfpID_OtherParent») всех детей с родительским ID (PID), равный, скажем, 1 с NULL, если другой родитель не указан в списке. Поэтому, если pID = 1, я хочу:

child_of_pID other_parent 
3    2 
4    NULL 

У меня возникли проблемы с выяснением того, как создать такой стол.

ответ

2

Этот запрос будет возвращать правильный результат для вашего примера

SELECT p1.child as child_of_pID, p2.parent as other_parent 
FROM child_parent AS p1 
    LEFT JOIN child_parent p2 
    ON p1.parent <> p2.parent AND p1.child = p2.child 
WHERE p1.parent = 1; 
+1

нет необходимости подвыборки - http://sqlfiddle.com/#!9/5fc0a/6 –

0

Это прекрасно работает - я должен изучать псевдонимы больше. Я думаю, что AS отсутствует, и обобщающее Pid (= 1 в приведенном выше примере), я хотел бы написать:

SELECT p1.child as child_of_pID, p2.parent as other_parent 
FROM child_parent AS p1 
    LEFT JOIN child_parent AS p2 
    ON p1.parent <> p2.parent AND p1.child = p2.child 
WHERE p1.parent = pID; 
Смежные вопросы