我觉得我在这里错过了一些简单的东西......
表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
它排除了左表中的行。
答案 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