-2

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

表 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

它不包括左表中的行。

4

3 回答 3

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'
于 2013-09-13T17:12:12.827 回答
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
于 2013-09-15T03:04:29.197 回答
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)
于 2013-09-13T15:42:37.987 回答