我有一张位置表。每个位置都以树的形式存储在此表中。记录可以是任何其他位置的子位置,依此类推。
在我的位置表中,我执行以下tsql以生成具有子位置的所有位置
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 的 UNION ,但 UNION ALL 会返回重复的行。我想选择不同的行,就像仅使用UNION一样。
如何在SQL中的 WITH 语句中使用 UNION 关键字?
答案 0 :(得分: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
对我来说很好用
答案 1 :(得分:0)
在外部选择中添加UNION ALL
而不是UNION
和SELECT DISTINCT * FROM LocationTree
。