SQL左连接没有id没有返回

时间:2013-09-13 15:33:31

标签: sql sql-server tsql left-join

我觉得我在这里错过了一些简单的东西......

表A(名称,值)

ABC  123
DEF  456
XYZ  789
NON  111

表B(名称1,名称2,颜色)

ABC  NULL  Red
NULL DEF   Blue

SQL查询

select * 
from TableA A
left join TableB B on A.name = B.name1 or A.name = B.name2

这样做只会返回

A.name,a.value,b.color

ABC 123 Red
DEF 456 Blue

我需要它返回

A.name,a.value,b.color

ABC 123 Red
DEF 456 Blue
XYZ 789 NULL
NON 111 NULL

它排除了左表中的行。

3 个答案:

答案 0 :(得分:1)

您对第一个答案的评论说“我还有其他一些表格加入,这只是一个简单的例子”。我猜是这样的:

1)其中一个表在您的查询中加入了TableB 和
2)这个附加表在WHERE子句中引用 和
3)相关联接不是LEFT JOIN,和/或WHERE子句不计算NULL

这些事情将结合起来否定你的LEFT JOIN的影响,例如下面的例子:

select * 
from TableA A
left join TableB B on A.name = B.name1 or A.name = B.name2
left join TABLEC C ON b.Field1 = C.Field1
WHERE C.MyField = 'avalue'

答案 1 :(得分:0)

假设您需要表A中的所有条目与表B中的匹配条目一起加入,您需要这样的查询 -

SELECT 
     A.Name, 
     A.Value, 
     B.Color 
 FROM 
     TableA A 
     LEFT OUTER JOIN TableB B 
         ON (A.Name B.Name1 OR A.Name = B.Name2)

答案 2 :(得分:0)

如果执行以下查询

select A.name, a.num, b.color 
from TableA A
left join TableB B on A.name = B.name1 or A.name = B.name2

它会得到结果

ABC 123 Red
DEF 456 Blue
XYZ 789 NULL
NON 111 NULL