sql从分层表中获取树

时间:2017-12-18 18:03:38

标签: sql

如果你有一个表层次结构,表中的每个项目都包含对父表中父项id的引用,有没有办法从单个(少数)sql查询中获取树作为树?

  • specy(id,name,genus)
  • 属(id,name,family)
  • 家庭(身份证,姓名)

看起来像:

SELECT *
FROM specy
JOIN genus ON genus.id=specy.genus
JOIN family ON genus.family=family.id

但即使这在语法上是正确的,它是否会为该族的每个属返回一个带有族字段的数据集,并且该属的每个种类都有一个家族和一个属字段?

SQL可以直接(轻松)返回一个分层树,还是只返回一个我必须用另一种语言处理的数据集?

2 个答案:

答案 0 :(得分:1)

是的,SQL可以使用common table expressions (CTEs)返回分层数据,但并非所有数据库都支持CTE。语法是:

WITH [RECURSIVE] with_query [, ...]
SELECT...

示例:

WITH RECURSIVE table1 (n, fact) AS 
(SELECT col1+1, col1*col2 FROM table1)
SELECT * FROM table1;

答案 1 :(得分:0)

如果您不想查看冗余信息,可以按系列和类别订购结果,然后使用用户变量用空格替换上一行的重复项。然后,您只会在更改时看到家族和属名称。

ERROR: (gcloud.compute.instances.update) unrecognized arguments: --deletion-protection