SQL 嵌套查询

标签 sql

我有一张如下表

id  name     dependency
-----------------------
1   xxxx     0
2   yyyy     1
3   zzzz     2 
4   aaaaaa   0
5   bbbbbb   4
6   cccccc   5

名单还在继续。我想从这个表中选择一组行,方法是在 SQL 的 where 子句中给出 0 依赖项的名称,直到它达到没有更多依赖项的条件。 (例如,第 1,2,3 行形成一个组,第 4,5,6 行是另一个组)。请帮助

最佳答案

由于您没有指定产品,我将使用 SQL 规范中可用的功能。在这种情况下,我使用了许多数据库产品支持的公用表表达式,包括 SQL Server 2005+ 和 Oracle(但不包括 MySQL):

With MyDependents As
    (
    Select id, name, 0 As level
    From MyTable
    Where dependency = 0
        And name = 'some value'
    Union All
    Select T.id, T.name, T.Level + 1
    From MyDependents As D
        Join MyTable As T
            On T.id = D.dependency
    )
Select id, name, level
From MyDependents

另一个不依赖于公用表表达式但确实假设最大深度级别(在这种情况下低于 0 级的两个级别)的解决方案将类似于
Select T1.id, T1.name, 0 As level
From MyTable As T1
Where T1.name = 'some value'
Union All
Select T2.id, T2.name, 1 
From MyTable As T1
    Join MyTable As T2
        On T2.Id = T1.Dependency
Where T1.name = 'some value'
Union All
Select T3.id, T3.name, 2
From MyTable As T1
    Join MyTable As T2
        On T2.Id = T1.Dependency
    Join MyTable As T3
        On T3.Id = T2.Dependency
Where T1.name = 'some value'

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

相关文章:

sql - 连接两个表,以便结果显示在多列中

mysql - mysql中的条件反转

.net - 压缩 SQL 的冗余文本数据。固定词典?

java - Hibernate SQL findin 最常出现的数字是多少?

java - SQL 连接与 Java 代码?

sql - 需要sql查询中的Range计数

Sqlite-获取编号的行

sql - 如何从包含组合数据的列中获取结果?

mysql - MySQL语句中的IF ELSE还是CASE?

sql - mysql中从一个字段提取数据到另一个字段