【问题标题】:Cross Join In Sql Server not always return all rows from all tablesSql Server 中的交叉连接并不总是返回所有表中的所有行
【发布时间】:2014-12-07 23:12:30
【问题描述】:

如果其中一个表没有任何行,有时交叉连接不会返回任何行

例如

WITH    q1
      AS ( SELECT   1 AS V1
           WHERE    0 <> 0
         ),
    q2
      AS ( SELECT   2 AS V2
         )
SELECT  *
FROM    q1 ,
        q2

我希望这个查询将返回一行 V1 = null 和 V2 = 2 但它不返回任何行

有什么解释吗?

【问题讨论】:

    标签: sql sql-server cross-join


    【解决方案1】:

    交叉连接(笛卡尔积)返回两个表中行的每个组合。即一张桌子上的每一行都与另一侧的每一行配对。

    这给出了M * N 行,其中M 是一侧的行数,N 是另一侧的行数。

    乘以零返回零。

    如果要保留另一侧不匹配的行,则需要外连接。

    WITH    q1
          AS ( SELECT   1 AS V1
               WHERE    0 <> 0
             ),
        q2
          AS ( SELECT   2 AS V2
             )
    SELECT  *
    FROM    q1 RIGHT OUTER JOIN
            q2 ON 1=1
    

    (或FULL OUTER JOIN 从任一侧保留)

    【讨论】:

      猜你喜欢
      • 2015-07-26
      • 2016-01-31
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      • 2015-05-17
      • 2018-03-02
      相关资源
      最近更新 更多