2014-10-28 67 views
1

我有这列从2个表SQL Server中,从不同的表

从2列选择
Table1   Table2 

Code ID  Code ID 
A  1   A  1 
B  1   B  1 
C  1   C  1 
D  1 
E  1 

我的查询:

Select 
    a.id, a.code, b.code 
from 
    Table1 a, Table2 b 
where 
    a.id = '1' and a.id = b.id 

我期待什么

ID code code 
1  A  A 
1  B  B 
1  C  C 
1  D  NULL 
1  E  NULL 

我该怎么

ID code code 
1  A  A 
1  B  A 
1  C  A 
1  D  A 
1  E  A 
1  A  B 
1  B  B 
1  C  B 
.... 

有何想法?不同并没有帮助

感谢

+0

[不良习惯踢:使用旧式联接(http://sqlblog.com/blogs/aaron_bertrand /archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - 旧式*逗号分隔的表*样式列表被替换为* proper * ANSI'在ANSI - ** 92 ** SQL标准(**超过20年**前)中加入JOIN'语法,并且不鼓励使用 – 2014-10-28 07:51:12

回答

3

好了,所有的ID的两个表中都为1,那么通过加入的ID,你会得到两个表的笛卡尔积。

相反,你需要做一个左外连接基于Table1.Code

Select a.id, a.code, b.code 
from Table1 a LEFT OUTER JOIN Table2 b 
on a.code = b.code 
where a.id = '1'; 
+0

完美,谢谢。我会尽我所能接受答案。 – sabre 2014-10-28 07:10:02

2

你需要做一个LEFT OUTER JOIN,而不是一个笛卡尔乘积从联接的左侧

SELECT a.Id, a.Code, b.Code FROM Table1 a 
     LEFT OUTER JOIN Table2 b ON a.Code = b.Code 
     WHERE a.Id = '1' 

一个LEFT OUTER JOIN返回所有行(在这种情况见表1),无论连接右侧的表中是否有匹配的记录(本例中为表2)。根据您的要求,b.Code将返回NULL

参考OUTER JOINS