代码之家  ›  专栏  ›  技术社区  ›  Alberto

MySQL8/MariaDB10树中的递归查询

  •  1
  • Alberto  · 技术社区  · 4 年前

    我的数据库中的类别有一个树状结构:

    create table cat(
         id int auto_increment primary key,
         url varchar(50),
         parent int references cat(id)
    )
    

    parent (不为空)

    我用的是MariaDB 10.2

    1 回复  |  直到 4 年前
        1
  •  2
  •   Nick SamSmith1986    4 年前

    这个递归的CTE将在表中的每个级别形成一个URL,用一个 / (尽管这很容易改变)。所需的最终节点在CTE中指定(在本例中,它是 7 ):

    WITH RECURSIVE urls AS (
      SELECT url, parent
      FROM cat
      WHERE id = 7
      UNION ALL
      SELECT CONCAT_WS('/', cat.url, urls.url), cat.parent
      FROM urls
      JOIN cat ON cat.id = urls.parent
    )
    SELECT CONCAT('http://', url) AS url
    FROM urls
    WHERE parent IS NULL
    

    Demo on dbfiddle

    通过省略 WHERE id =

    url
    http://home
    http://home/apps
    http://home/user
    http://home/apps/excel
    http://home/apps/word
    http://home/user/nick
    http://home/user/nick/docs
    

    Demo on dbfiddle