在SQL中使用UNION和WITH语句
问题描述:
我有一个位置表。每个位置都以树的形式存储在此表中。记录可以是任何其他位置的位置等。
在我的位置表,我执行下面的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 UNION但UNION ALL返回重复的行。我想选择不同的行,例如只使用UNION时。
如何使用UNIONWITH SQL语句中的关键字?
答
问题是因为你的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
工作正常,我
答
添加UNION ALL
而不是UNION
和SELECT DISTINCT * FROM LocationTree
在外部选择。
+0
我不想让它离开选择。那就是为什么我坚持用WITH语句解决它。 – Fer 2013-05-03 11:46:23
只是想知道..递归查询的一个不同名称,我的意思,而不是LocationTree,这也是您的表的名称? – bonsvr 2013-05-03 09:54:03
@bonsvr你认为我的查询是错误的?我在网上找到了这个例子,所以我不太确定它。如果你看到任何错误,你能否告诉我纠正我的疑问? – Fer 2013-05-03 11:45:33