mysql - 嵌套记录的 SQL 查询

标签 mysql sql

给定一个表中的记录在同一个表中有父项,并且那些父项有自己的父项,如果不同的记录可以有不同数量的父项,什么查询会为我获取所请求记录的所有父项的记录。

示例:我有记录 4 的 ID 并想获取所有父记录 (1,2,3)。当然我可以获取记录 4,查看谁是父项并获取记录 3,查看谁是父项并获取记录 2,直到我获取的记录没有父项,但是有没有一个查询可以让我得到所有的记录记录?

Example Table:
ID | Type | Parent ID
----------------------------
1  |Master|
2  |Sub 1 | 1
3  |Sub 2 | 2
4  |Sub 3 | 3
5  |Master| 
6  |Sub 1 | 5

最佳答案

如果您假设一个固定的最大深度级别,则可以表示层次结构。例如,在此示例中,我假设深度不超过四个级别。如果没有用于递归评估的公用表表达式,则没有超出此类解决方案或使用变量的单一查询方法。

Select T1.Id, T1.Type
    , Concat( Coalesce( Concat(Cast(T4.Id As char(10)),','),'')
        , Coalesce( Concat(Cast(T3.Id As char(10)),','),'')
        , Coalesce( Concat(Cast(T2.Id As char(10)),','),''))
        As Hierarchy
From ExampleTable As T1
    Left Join ExampleTable As T2
        On T2.Id = T1.ParentId
    Left Join ExampleTable As T3
        On T3.Id = T2.ParentId
    Left Join ExampleTable As T4
        On T4.Id = T3.ParentId

关于mysql - 嵌套记录的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10367229/

相关文章:

java - SQL查询返回数据但ResultSet为空

php - PK和FK表设计的混淆

python - 更新查询在 python 中抛出异常

mysql - 可以在 MySQL 的事务内完成架构更改吗?

MySQL 查询以匹配英国邮政编码,而不管空格的数量

sql - Golang 中函数的泛化

sql - 从 JSON postgres 数组中获取元素

mysql - 在 SQL 中合并具有空值的列

python - MySQLDB 查询不返回所有行

MySQL 将字段名称转换为行中的值