SQL Server,从不同表中的2列中选择

时间:2014-10-28 06:57:07

标签: sql 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
....

有什么想法吗?明显没有帮助

由于

2 个答案:

答案 0 :(得分: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';

答案 1 :(得分:2)

你需要做一个LEFT OUTER JOIN而不是Cartesian产品

    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),无论连接右侧的表中是否存在匹配记录(in这种情况见表2)。如果没有匹配,则根据您的要求为b.Code返回NULL

参考OUTER JOINS