Как несколько раз объединить одну и ту же таблицу? - PullRequest
0 голосов
/ 12 мая 2011

У меня есть таблицы Connection и Location со следующими столбцами:

Connection:

LocationIDFrom  
LocationIDTo 
Duration

Location:

LocationID
LocationName

Примеры записей следующие: Соединение:

1, 2, 3ms
2, 1, 5ms
1, 5, 12ms
3, 2, 2ms

Местоположение:

1, New York
2, Boston
3 Los Angeles

Я хотел отобразить таблицу со столбцами LocationFrom, LocationTo, Duration.Примером приведенных выше записей будет

New York, Boston, 3ms
Boston, New York, 5ms
Los Angeles, Boston, 2ms

. Я попытался использовать следующий запрос

SELECT l1.LocationName AS LocationFrom, l2.LocationName AS LocationTo, c.Duration
FROM Connection c
  INNER JOIN Location l1 ON l1.LocationID= c.LocationIDFrom
  INNER JOIN Location l2 ON l2.LocationID= c.LocationIDTo

, но результат был неполным;пропали строки, данные о местоположении которых были сохранены в таблице Location как для LocationIDFrom, так и для LocationIDTo.

Кто-нибудь знает, как изменить приведенный выше запрос или написать правильный, который возвращает таблицу с именами местоположений, которые должны быть полученыиз той же таблицы для LocationFrom и LocationTo вместо идентификаторов?

Здесь Я нашел решение для аналогичной проблемы, но не знаю, почему принцип не работает для проблемы, описанной выше.

1 Ответ

6 голосов
/ 12 мая 2011

Это потому, что вы не можете присоединиться к ID 5, потому что он не существует. Если вы покинули внешнее объединение, вы выберете соединение и просто не будете иметь названия мест, которые не существуют.

SELECT isNull(l1.LocationName,'') AS LocationFrom, isNull(l2.LocationName,'') AS LocationTo, c.Duration 
FROM Connection c 
left outer JOIN Location l1 ON l1.LocationID= c.LocationIDFrom
left outer JOIN Location l2 ON l2.LocationID= c.LocationIDTo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...