2012-10-01 36 views
0

该查询不起作用:CTE UNION毕竟

WITH a AS 
(SELECT 1 AS c1) 
SELECT 
    * 
FROM 
    a 


UNION ALL 

WITH b AS 
(SELECT 1 AS c1) 
SELECT 
    * 
FROM 
    b 

你能帮忙,好吗?

真正的查询使用表,但它在示例中不是必需的。

非常感谢

回答

5
;WITH a AS 
(SELECT 1 AS c1), 
b AS 
(SELECT 1 AS c1) 
SELECT 
    * 
FROM 
    a 
UNION ALL 
SELECT 
    * 
FROM 
    b 
1

答案很简单:你打破查询;-)

让我解释一下:

  • 的UNION关键字需要2 “查询” 和品牌他们合而为一。与关键字无法查询内部使用
  • 的,它仅适用于一个查询
  • WITH可以用来定义多个CTE的

所有这些的结果是,你要在UNION查询之前定义两个CTE(一个& b)。 将WITH放入UNION查询中会破坏UNION(因为WITH始终在查询之前(之前))