Sql server 无法理解如何与…诱惑是获取一个额外的行
我有一个名为Sql server 无法理解如何与…诱惑是获取一个额外的行,sql-server,Sql Server,我有一个名为Property的表,它有两列PropertyRSN和ParentPropertyRSN 数据 propertyRSN | parentpropertyRSN 19 | 3 18 | 6 27 | 7 12 | 9 13 | 9 16 | 12 WITH tempTable(PLRSN, PRSN) AS ( SELECT PropertyRSN, Property.P
Property
的表,它有两列PropertyRSN
和ParentPropertyRSN
数据
propertyRSN | parentpropertyRSN
19 | 3
18 | 6
27 | 7
12 | 9
13 | 9
16 | 12
WITH tempTable(PLRSN, PRSN) AS (
SELECT PropertyRSN, Property.ParentPropertyRSN
FROM Property
WHERE PropertyRSN = 16
UNION ALL
SELECT nplus1.PropertyRSN, nplus1.ParentPropertyRSN
FROM Property as nplus1, tempTable
WHERE tempTable.prsn = nplus1.PropertyRSN
)
SELECT PLRSN, PRSN
FROM tempTable
结果
PLRSN | PRSN
16 | 12
12 | 9
9 | NULL
问题-我无法理解temTable查询如何获取数据为9 | NULL
的行?
此外,我无法理解如何在括号内使用TemTable
=====================================================================
create table property (propertyRSN int, ParentPropertyRSN int);
Insert into property (propertyRSN, ParentPropertyRSN) values (19,3);
Insert into property (propertyRSN, ParentPropertyRSN) values (18,6);
Insert into property (propertyRSN, ParentPropertyRSN) values (27,7);
Insert into property (propertyRSN, ParentPropertyRSN) values (12,9);
Insert into property (propertyRSN, ParentPropertyRSN) values (13,9);
Insert into property (propertyRSN, ParentPropertyRSN) values (16,12);
您的CTE恰好是一个递归CTE,我会选择使用显式联接编写:
WITH tempTable (PLRSN, PRSN) AS (
SELECT PropertyRSN, Property.ParentPropertyRSN
FROM Property
WHERE PropertyRSN = 16
UNION ALL
SELECT nplus1.PropertyRSN, nplus1.ParentPropertyRSN
FROM Property AS nplus1
INNER JOIN tempTable t ON t.prsn = nplus1.PropertyRSN
)
SELECT PLRSN, PRSN FROM tempTable;
PLRSN=16
的第一行来自递归CTE的基本情况,它出现在UNION ALL
之前。接下来的两行来自两个递归步骤。虽然在上一次迭代中,来自可诱惑的的PRSN
值不是NULL
(实际上是9),但该记录的父记录确实有NULL
值用于PRSN
。这就是为什么递归会在那一点停止,因为父项已被命中。谢谢@Tim我现在明白了-第一行来自属性表-第二行来自union all查询的第二个查询,其中PRSN=12
-第三行来自union all查询的第二个查询,其中PRSN=9
sinc9
没有值对于ParentPropertyRSN
,我们看到NULL