我在同一个表中有子表和父表层次结构的表。 我有列来标识相应节点的父节点。 记录如
Id name Parent
1 ABC Null
2 PQR 1
3 DEF Null
4 LMN Null
5 OPQ Null
6 JKL 2
7 TUY 4
CREATE TABLE #Temp
(
Id INT,
Name varchar(3),
Parent INT
)
INSERT INTO #Temp VALUES (1,’ABC’,Null)
INSERT INTO #Temp VALUES (2,’PQR’, 1)
INSERT INTO #Temp VALUES (3,’DEF’, Null)
INSERT INTO #Temp VALUES (4,’LMN’, Null)
INSERT INTO #Temp VALUES (5,’OPQ’, Null)
INSERT INTO #Temp VALUES (6,’JKL’, 2)
INSERT INTO #Temp VALUES (7,’TUY’, 4)
如何编写查询以找出有孩子的父母和孩子的id? 多了一个查询,找到没有父母的孩子?
答案 0 :(得分:0)
我的问题不够明确。没有孩子的父母应该出现在查询中?你想要每个父子的记录,或者这种类型的一行:parentid-son1; son2; son3;?
作为示例,您可以使用此代码:
SELECT p.id as parentid, h.id as sonid FROM #temp p INNER JOIN #temp h ON p.id = h.parent
答案 1 :(得分:0)
查询以找出有孩子和孩子身份的父母
SELECT parent, id AS "Child"
FROM #Temp
WHERE Parent is not null
查询找到没有父母的孩子
SELECT id AS "Child"
FROM #Temp
WHERE Parent is null
答案 2 :(得分:0)
没有大量清楚你的要求,并假设它只是上面的单个表格,我认为只要不包括NULLS
就可以得到你想要的。
SELECT Id, name, parent
FROM #Temp
WHERE parent IS NOT NULL
答案 3 :(得分:0)
看起来您正在使用Sql Server
。我将使用recursive cte
;WITH cte
AS (SELECT id,name,Parent,0 AS level
FROM #Temp
WHERE Parent IS NULL
UNION ALL
SELECT b.id,b.name,b.Parent,level + 1
FROM cte a
JOIN #Temp b
ON a.Id = b.Parent)
SELECT b.Id,b.Name,b.Parent
FROM cte a
JOIN cte b
ON a.Parent = b.Id
WHERE a.level >1