1

我有一个位置表。每个位置存储在此表中作为一棵树。记录可以是任何其他位置的子位置,依此类推。
在我的位置表中,我执行以下 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而不是UNIONUNION ALL返回重复的行。我想选择不同的行,例如仅使用 UNION 时。

如何在 SQL 的WITH语句中使用UNION关键字?

4

2 回答 2

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

对我来说很好

于 2013-05-03T09:45:39.203 回答
0

在外部选择中添加UNION ALL而不是UNION和。SELECT DISTINCT * FROM LocationTree

于 2013-05-03T09:54:03.747 回答