如何多个加入同一个表?

时间:2011-05-12 13:56:37

标签: sql sql-server-2008

我的表连接和位置包含以下列:

连接:

LocationIDFrom  
LocationIDTo 
Duration

位置:

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

但结果不完整;缺少行,哪些位置详细信息存储在LocationIDFrom和LocationIDTo的位置表中。

是否有人知道如何修改上述查询或编写正确的查询,该表返回具有位置名称的表,必须从同一个表中检索LocationFrom和LocationTo而不是ID?

Here我找到了类似问题的解决方案,但不知道为什么原理不能解决上述问题。

1 个答案:

答案 0 :(得分:6)

这是因为你不能加入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