我的表连接和位置包含以下列:
连接:
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我找到了类似问题的解决方案,但不知道为什么原理不能解决上述问题。
答案 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