2013-05-03 158 views
1

我有一個位置表。每個位置都以樹的形式存儲在此表中。記錄可以是任何其他位置的位置等。
在我的位置表,我執行下面的TSQL產生與他們sublocations
在SQL中使用UNION和WITH語句

WITH LocationTree AS (
    SELECT L.* FROM Location L 
       UNION 
    SELECT L.* FROM LocationTree LT, Location L where L.ParentLocationID = LT.LocationID 
     ) 

SELECT * FROM LocationTree 

所有地點,但它給了我一個錯誤:

Recursive common table expression 'LocationTree' does not contain a top-level UNION ALL operator. 

錯誤說,我必須使用UNION ALL insend UNIONUNION ALL返回重複的行。我想選擇不同的行,例如只使用UNION時。

如何使用UNIONWITH SQL語句中的關鍵字?

+2

只是想知道..遞歸查詢的一個不同名稱,我的意思,而不是LocationTree,這也是您的表的名稱? – bonsvr 2013-05-03 09:54:03

+0

@bonsvr你認爲我的查詢是錯誤的?我在網上找到了這個例子,所以我不太確定它。如果你看到任何錯誤,你能否告訴我糾正我的疑問? – Fer 2013-05-03 11:45:33

回答

0

問題是因爲你的CTE被命名爲與您的其中一個表:

WITH LT AS (
    SELECT L.* FROM Location L 
       UNION 
    SELECT L.* FROM LocationTree LT, Location L where L.ParentLocationID = LT.LocationID 
     ) 
SELECT * FROM LT 

工作正常,我

+0

我不想讓它離開選擇。那就是爲什麼我堅持用WITH語句解決它 – Fer 2013-05-03 11:46:38

+0

我的db中沒有表LocationTree。我將parentID和locationID存儲在同一個名爲Location的表中。 – Fer 2013-05-06 09:14:28

0

添加UNION ALL而不是UNIONSELECT DISTINCT * FROM LocationTree在外部選擇。

+0

我不想讓它離開選擇。那就是爲什麼我堅持用WITH語句解決它。 – Fer 2013-05-03 11:46:23