我想选择所有包含父级和子级的数据。我有一个这样的样本表:
ID Name Parent
1 Mike 6000
2 Mike_x1 1
3 Mike_x2 2
4 Mike_x3 6333
5 Mike_x4 2
6 Mike_x5 3
7 Bob_x2 5
首先,我选择数据来获取标题:
select * from table1 where parent = 1
我得到这样的标题数据:
ID Name Parent
2 Mike_x1 1
从标题我得到一个新的ID = 2作为标题数据。所以我再选择一个孩子:
select * from table1 where parent = 2
我得到这样的数据:
ID Name Parent
3 Mike_x2 2
5 Mike_x4 2
从第一个孩子我得到一个新ID = 3和ID = 5.所以我再次选择另一个孩子:
select * from table1 where parrent = 3
和
select * from table1 where parrent = 5
我得到的数据是这样的:
ID Name Parrent
6 Mike_x5 3
和
ID Name Parrent
7 Bob_x2 5
这是我的父母和孩子的步骤。但我想选择使用1个查询来获取所有父数据和子数据。当我第一次选择获取标题select * from table1 where parrent = 1
时,我会得到如下结果:
ID Name Parrent
2 Mike_x1 1
3 Mike_x2 2
5 Mike_x4 2
6 Mike_x5 3
7 Bob_x2 5
有人帮帮我吗?我是否可以通过1个查询来完成,这不需要选择手动,如select * from parent = 1,2,3,5 etc
答案 0 :(得分:1)
SELECT DISTINCT * FROM table1
WHERE ID IN (SELECT Parent FROM table1)
AND Parent IN (SELECT ID FROM table1)
ORDER BY ID ASC
答案 1 :(得分:0)
假设我对这个问题的理解是正确的,这将“选择所有拥有父母和子女的数据”
Select T1.*
FROM TableName T1
INNER JOIN tableName Parents
on T1.ParentID = Parents.ID
INNER JOIN tableName Kids
on Kids.ParentID = T1.ID
更正了最后一个元素的内连接Kids.ID应该是Kids.ParentID
应该导致
ID Name Parent
2 Mike_x1 1
3 Mike_x2 2
5 Mike_x4 2
这是有效的,因为内部自我连接排除了没有父母或孩子的记录。
如果这些不是预期的结果:预期的结果是什么?
如果您需要知道父母是谁以及孩子只是添加到选择
Select t1.*, Parents.*, Kids.*
然而,如果你需要遍历hieracy并列出孩子的父母孩子等...那么需要XML路径或cte。