2012-10-01 70 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始終在查詢之前(之前))