我正在尝试构建一个查询,用于使用CTE查询从表中搜索所有父行和子行。
我既可以搜索父母,也可以返回子女,也可以搜索子女和返回父母,但我不能在一个查询中同时处理这两种可能性。
我只能完成一个联盟所有的疑问。
我哪里出问题了?
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我收到一个错误:
陈述结束了。最大递归100已在语句完成之前耗尽。
发布于 2015-12-03 00:48:49
尝试使用两个不同的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;发布于 2015-12-02 17:04:43
在UNION ALL之后的第二个select被递归地调用,直到没有更多的行被添加到结果集中。
是这样的;
检测周期比较复杂,但可以完成。
https://stackoverflow.com/questions/34046580
复制相似问题