【问题标题】:CROSS JOIN with one empty table sql server与一个空表sql server CROSS JOIN
【发布时间】:2015-06-19 15:56:57
【问题描述】:

我有两张桌子,分别是 MyFullMyEmpty。我需要合并两个表中的所有记录。有时,MyEmpty 表可能没有记录,在这种情况下我需要返回来自MyFull 的所有记录。这是我尝试过的:

 --Q1 >> returns no results
 SELECT *
 FROM MyFull CROSS JOIN MyEmpty 

--Q2 >> returns no results 
SELECT *
FROM MyFull, MyEmpty

我虽然使用LEFT JOIN,但我没有可以加入的通用密钥。这是SQLFiddle

【问题讨论】:

    标签: sql-server sql-server-2008-r2


    【解决方案1】:

    试试这个:

    SELECT *
    FROM MyFull
    LEFT JOIN MyEmpty ON 1=1
    

    但请注意,如果您在 MyEmpty 中有多个记录,它将为 MyEmpty 中的每条记录重复一次来自 MyFull 的记录。实际上,结果中的记录数是 MyFull * MyEmpty(除非 MyEmpty 没有记录)。

    【讨论】:

    • 谢谢乔尔。这就是我要找的。其实我想重复记录。
    【解决方案2】:

    全桌:

    declare @t table (Spot int,name varchar(1),pct int)
    insert into @t(Spot,name,pct)values(1,'A',2),(1,'B',8),(1,'C',6),(2,'A',4),(2,'B',5),(3,'A',5),(3,'D',1),(3,'E',4)
    

    空表:

    declare @tt table (Spot int,name varchar(1),pct int)
    select * from @t OUTER APPLY @tt 
    

    【讨论】:

    • joel 获取结果集外部的解决方案是什么?同样的@Ala
    • SELECT * FROM MyFull OUTER APPLY MyEmpty 看起来也很直观。我也确定相同的执行计划。
    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多