如何重写此查询不使用union子句

gar*_*rik 4 sql t-sql sql-server-2005

如何重写此查询不要使用UNION(UNION ALL)子句:

SELECT
  c
FROM a
UNION
SELECT
 c
FROM b
Run Code Online (Sandbox Code Playgroud)

预期结果(记录集应该相同):

SELECT
  c
FROM ....
Run Code Online (Sandbox Code Playgroud)

Ben*_*thy 7

要获得与上述查询相同的结果,您可以执行以下操作:

SELECT COALESCE(a.c, b.c) AS c
FROM a
FULL OUTER JOIN b
    ON b.c = a.c
Run Code Online (Sandbox Code Playgroud)

但是,这将给出与UNION相同的结果,UNION与UNION ALL不完全相同(因为将删除重复项).要执行UNION all,您需要执行相同操作但连接条件失败:

SELECT COALESCE(a.c, b.c) AS c
FROM a
FULL OUTER JOIN b
    ON 1 = 0
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,我都不确定它会比使用UNION快得多.