首页 > 解决方案 > transact-SQl 查询左连接两个表并从表中获取所有数据

问题描述

假设我有两个表,如下例所示

TableA
A_Id | A_Value | A_Number
1       AAA       111
2       BBB       222
3       CCC       333

TableB
B_Id | A_Id | B_Value | B_Number
1       1       XXX       999
2       2       YYY       888
3      NULL     ZZZ       777

如您所见,A_IdTableA的主键和TableB的外键。
我想要的结果是加入这两个表,从 TableA 中获取所有行并相交行。

要求的结果

A_Id | A_Value | A_Number | B_Id | B_Value | B_Number
1       AAA       111        1      XXX       999
2       BBB       222        2      YYY       888
0       AAA       111        0      ''         0  <= this row is missing
0       BBB       222        0      ''         0  <= this row is missing
0       CCC       333        0      ''         0

如您所见,前两行是相交的行,接下来的三行都是TableA中的所有行。

我已经尝试过离开加入

select A.*, B.* from FROM TableA A
LEFT OUTER JOIN 
TableB B on A.A_Id = B.A_Id

但缺少第三和第四行。
我怎样才能得到这样的结果?
注意:您可以忽略空值/零值,因为我已经使用了 ISNULL。

标签: sql-serverleft-join

解决方案


在您的“示例结果”(上图)中,您似乎想要一些不同的东西(不是 LEFT JOIN)。看起来您需要匹配来自 TableA 和 TableB 的记录,并且再次需要来自 TableA 的所有内容。您可以使用 UNION 语句来做到这一点。像这样:

SELECT A.*, B.B_Id, B.B_Value, B.B_Number 
FROM TableA A INNER JOIN TableB B on A.A_Id = B.A_Id
UNION
SELECT *, 0 AS B_id, '' AS B_Value, 0 AS B_Number 
FROM TableA

推荐阅读