Простое соединение таблиц 3 sql используя ту же таблицу? - PullRequest
1 голос
/ 08 мая 2011

У меня есть две таблицы:

Таблица 1
id, name1

Таблица 2
id, name2a, name2b

Имена столбцов таблицы 2 name2a и name2b являются ссылками на идентификатор таблицы 1. Мне нужно создать запрос, который извлекает оба имени из таблицы 1 на основе идентификаторов, использованных в таблице 2.

Следовательно, если в Таблице 1 содержалось:

1 Peter
2 Paul

И таблица 2 содержала:

1 1 2
2 2 2

Тогда оператор select должен дать мне:

Peter Paul
Paul Paul

Я обошел все вокруг, пытаясь построить этот SQL, и лучшее, что я придумал, было:

SELECT table1.name AS 'name', table1.name AS 'Other name'
FROM table1, table2
WHERE table1.id = table2.name2a

Который правильно показывает только столбец name2a.

Любая помощь приветствуется! Я думаю, мне нужно сделать соединение, но я действительно изо всех сил ...

Ответы [ 4 ]

5 голосов
/ 08 мая 2011

Начните со своей второй таблицы и присоедините ДВАЖДЫ к таблице 1 (соответственно, различные псевдонимы), затем получите поле имени из каждой записи таблицы с псевдонимом.

select 
      T2.ID,
      TJ1.Name1 as FirstName,
      TJ2.Name1 as SecondName
   from 
      Table2 t2
         join Table1 TJ1
            on t2.Name2a = TJ1.ID
         join Table1 TJ2
            on t2.Name2b = TJ2.ID
2 голосов
/ 08 мая 2011
     select foo.*, t1.x, t2.y
     join t1 on t1.id = foo.a
     join t1 as t2 on  t2.id = foo.b

Если есть вероятность, что col a или col b равны нулю, используйте левое соединение.

1 голос
/ 08 мая 2011

Ваша проблема в том, что вам нужно сослаться на table1 дважды: один раз для простого table1.name и еще раз, чтобы посмотреть, на что указывает table2.Вы можете присоединиться к одной таблице несколько раз, если вы дадите им псевдонимы:

SELECT t1.name1, o.name1
FROM table1 t1
JOIN table2 t2 ON t1.id     = t2.name2a
JOIN table1 o  ON t2.name2b = o.id   -- And JOIN back to table1 to get the name1
1 голос
/ 08 мая 2011

Вы пытались использовать INNER JOIN?

ВЫБРАТЬ table1.name AS «имя», table1.name AS «другое имя» ИЗ таблицы1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ таблица2 ВКЛ table1.id = table2.name2a;

Извините, если я не помогу, не так уж хорош в SQL, хе-хе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...