SQL Server:在Query中包含缺少的数据

时间:2014-04-28 18:34:38

标签: sql sql-server

我在SQL Server中有两个表,如下所示,

表1:

Store   Type
100      A
101      B
102      B
103      B
104      C
105      C
106      A
107      A
108      D
109      D
110      C
111      B
112      D

和表2:

Store   Units
100       5
101       3
102      10
103       6
104       6
105       8

我想将查询中的两个表与两个表的Store列之间的关系链接组合在一起。我的问题是,如果我在两者之间创建一个查询,那么从106到112的商店不会出现在表中。查询如下所示,

SELECT dbo.Table1.Store, 
       dbo.Table1.Type, 
       dbo.Table2.Units 
FROM Table1 INNER JOIN Table2 
  ON dbo.Table1.Store=dbo.Table2.Store

我该怎么做才能包含Table2(106-112)中没有出现但在Table1中的商店,并使Units = 0,这样查询表看起来如下,

Store   Type    Units
100       A       5
101       B       3
102       B      10
103       B       6
104       C       6
105       C       8
106       A       0
107       A       0
108       D       0
109       D       0
110       C       0
111       B       0
112       D       0

2 个答案:

答案 0 :(得分:1)

您需要左外连接而不是内连接:

SELECT t1.Store, t1.Type, COALESCE(t1.Units, 0) as Units
FROM Table1 t1 LEFT JOIN
     Table2 t2
     ON t1.Store = t2.Store;

我还为您的查询引入了表别名,使其更具可读性。请注意coalesce()的使用,因此您0而不是Units获得NULL

答案 1 :(得分:0)

SELECT dbo.Table1.Store, dbo.Table1.Type, coalesce(dbo.Table2.Units, 0) As Units
FROM Table1 
LEFT JOIN Table2 ON dbo.Table1.Store=dbo.Table2.Store