我如何构建查询,其中父ID具有五个子ID,并且在该子id之后是父ID并且具有五个子id。我可以在我们的query.table中调用只有一个。请帮助我这种困惑。谢谢 问候 imadbaloch
答案 0 :(得分:2)
我不知道我是否认为你是对的,但我想是这样的:你想要一些递归查询来询问一个带有一些子实体的实体,这些实体也有子实体(孙子实体) )。
不幸的是, MySQL在查询中不支持递归。
您必须手动使用多个查询来询问子实体的子实体(孙实体)及其子实体(grandgrandchild实体)等。
更新:如果深度是固定的,比如说,您对直接子实体和孙子实体感兴趣(并且不再感兴趣),那么您可以执行两个连接,例如:
SELECT e.id, e.name, ce.id, ce.name, gce.id, gce.name
FROM <table> AS e
LEFT JOIN <table> AS ce ON ce.parent_id = e.id
LEFT JOIN <table> AS gce ON gce.parent_id = ce.id
答案 1 :(得分:0)
你可以自我加入以获得孩子的孩子。假设有一个表:
Id ChildId ....
----- ------- -----
....
类似的东西:
SELECT a.Id as EntryId, a.ChildId as ChildId, b.ChildId as GrandchildId
FROM <tablename> a INNER JOIN <tablename> b ON a.ChildId = b.Id
缺点是,对于您想要包含的每个层次结构,您需要另一个连接。
<强>更新强>
回应评论。
这不是每个父母的一个孙子。如果父母有5个孩子,并且每个孩子有4个孩子,那么你将总共返回20行。
要获得孙子女的全部细节,您需要再次自我加入,如下所示:
SELECT a.Id as EntryId, a.ChildId as ChildId, b.ChildId as GrandchildId, c.*
FROM (<tablename> a INNER JOIN <tablename> b ON a.ChildId = b.Id)
INNER JOIN <tablename> c ON b.ChildId = c.Id
答案 2 :(得分:0)
尝试以下查询:
DECLARE @id INT
SET @id = 5
CREATE TABLE #temp (id INT , ParentId INT)
INSERT INTO #temp VALUES(1,0);
INSERT INTO #temp VALUES(2,1);
INSERT INTO #temp VALUES(3,2);
INSERT INTO #temp VALUES(4, 3);
INSERT INTO #temp VALUES(5,4);
WITH parent AS
(
SELECT id, parentId from #temp WHERE id = @id
UNION ALL
SELECT t.id, t.parentId FROM parent
INNER JOIN #temp t ON t.id = parent.parentid
)
SELECT id,ParentId FROM parent
WHERE id <> @id;
Drop TABLE #temp;