2015-10-07 6 views
1

Мне нужно получить записи, которые не используются. Мои столы идут так:SQL присоединиться к двум столбцам в одной таблице

сегмент таблицы

| id | name | 
------------- 
| 1 | AAA | 
| 2 | BBB | 
| 3 | CCC | 
| 4 | DDD | 

segment_segment_assoc

| id | segment_name | child_name | 
---------------------------------- 
| 1 | AAA   | BBB  | 
| 2 | AAA   | CCC  | 

В segment_segment_assoc таблица хранит родительские/дочерние отношения между сегментами. Мне нужен запрос, который будет в состоянии к графу о том, как много сегментов в сегменте таблицы не в segment_segment_assoc таблицы в.

Я так хочу сделать это каким-то образом получить segment_segment_assoc таблицы для преобразования в одну таблицу типа имя. В примере, он должен обратиться к этому =>

| name | 
-------- 
| AAA | 
| BBB | 
| CCC | 

Где segment_segment_assoc.segment_name и segment_segment_assoc.child_name столбцы "добавляется" или "присоединился" вместе. Как только у меня это получилось, я мог бы сделать «NOT IN», чтобы увидеть, какие сегменты «не используются» в таблице segment_segment_assoc.

Это должно быть написано на SQL, но только для контекста, я использую Postgres.

Спасибо, продвинутый!

+0

это только простое объединение http://www.postgresql.org/docs/8.3/static/queries-union.html ... 'выберите SEGMENT_NAME from union union select child_name из ассоциации' – JamieD77

+0

Удалены изменения. Вопрос теперь возвращается к оригиналу. – BoxMan0617

ответ

1

Использование UNION следует сделать трюк:

SELECT count(*) FROM segment 
WHERE name NOT IN 
(
    SELECT segment_name FROM segment_segment_assoc 
    UNION 
    SELECT child_name FROM segment_segment_assoc 
) 
+0

Пожалуйста, объясните, почему? –

Смежные вопросы