对表变量的左连接失败

时间:2018-01-16 16:25:25

标签: sql-server tsql left-join

见下文我没有得到每个统计数据的行 这个左连接就像一个内连接 我得到6行,期待9个 我希望每个名称有3行(如果没有匹配则为空数据)
如何解决这个问题?

declare @table table (name varchar(10), status int, data int);
insert into @table values 
  ('a', 1, 2)
, ('a', 2, 5)
, ('a', 3, 7)
, ('b', 1, 5) 
, ('b', 2, 6)
, ('c', 1, 3) 

select stats.status as statusStats
     , t.status as statusData, t.name, t.data
from (values (1),(2),(3)) as stats(status)
left join @table t 
  on t.status = stats.status 

期望的输出

  ('a', 1, 2)
, ('a', 2, 5)
, ('a', 3, 7)
, ('b', 1, 5) 
, ('b', 2, 6)
, ('b', 3, null)
, ('c', 1, 3) 
, ('c', 2, null)
, ('c', 3, null)

1 个答案:

答案 0 :(得分:3)

您可能期望namestatus值之间的笛卡尔积。好吧,运气不好 - SQL无法“猜测”这个,你必须手动引入乘法:

select stats.status as statusStats, t.status as statusData, t.name, t.data
from (values (1),(2),(3)) stats(status)
  cross join (values ('a'),('b'),('c')) names(name)
left join @table t 
  on t.status = stats.status
  and t.name = names.name;
相关问题