use*_*272 3 t-sql sql-server common-table-expression
我正在尝试构建一个查询,以使用 CTE 查询从表中搜索所有父行和子行。
我可以搜索父母并返回孩子,或者搜索孩子并返回父母,但我无法在一个查询中处理这两种可能性。
我只能完成 UNION ALL 查询之一。
我哪里错了?
declare @search nvarchar(50)
--set @search = '%Nucleus sub project%';
set @search = '%Nucleus test';
WITH Parent AS
(
SELECT *
FROM tblProjects
WHERE ProjNo LIKE @search
OR ProjDes LIKE @search
UNION ALL
SELECT tblProjects.*
FROM tblProjects
JOIN Parent ON tblProjects.proID = Parent.ParentProjID
UNION ALL
SELECT tblProjects.*
FROM tblProjects
JOIN Parent ON tblProjects.ParentProjID = Parent.proID
)
SELECT distinct *
FROM Parent
ORDER BY ParentProjID
Run Code Online (Sandbox Code Playgroud)
我收到错误:
声明终止。在语句完成之前,最大递归次数 100 已用完。
尝试使用两种不同的 CTE:
WITH x AS (
SELECT p.*
FROM tblProjects p
WHERE ProjNo LIKE @search OR ProjDes LIKE @search
),
parents as (
SELECT *
FROM x
UNION ALL
SELECT p.*
FROM parents JOIN
tblProjects p
ON p.parentid= parents.proID
),
children as (
SELECT *
FROM x
UNION ALL
SELECT p.*
FROM children JOIN
tblProjects p
ON children.parentid = p.proID
)
SELECT distinct *
FROM parents
UNION
SELECT distinct *
FROM children;
Run Code Online (Sandbox Code Playgroud)