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

时间:2010-09-16 09:01:04

标签: sql sql-server-2005 tsql

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

SELECT
  c
FROM a
UNION
SELECT
 c
FROM b

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

SELECT
  c
FROM ....

1 个答案:

答案 0 :(得分:7)

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

SELECT COALESCE(a.c, b.c) AS c
FROM a
FULL OUTER JOIN b
    ON b.c = a.c

但是,这将给你与UNION相同的结果,它与UNION ALL不完全相同(因为重复项将被删除)。要做一个UNION all,你需要做同样的事情,但是连接条件失败了:

SELECT COALESCE(a.c, b.c) AS c
FROM a
FULL OUTER JOIN b
    ON 1 = 0

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