假设我有这个例子的内容:
CREATE TABLE NaiveTable
{
id BIGINT NOT NULL,
parentId BIGINT NULL,
name VARCHAR(20) NULL,
CONSTRAINT hierarchy FOREIGN KEY (parentId) REFERENCES NaiveTable(id)
PRIMARY KEY (id)
}
注意 parentId 是对 NaiveTable 的 id 的引用(以防我错过了确切的语法)。
数据在这些地方
+---------+----------+----------+
| id | parentId | name |
+---------+----------+----------+
| 1 | null | node1 |
+---------+----------+----------+
| 2 | 1 | node2 |
+---------+----------+----------+
| 3 | 1 | node3 |
+---------+----------+----------+
| 4 | 2 | node4 |
+---------+----------+----------+
列名包含一些未实现的标签。我正在寻找一种在 MySQL 表上构建 SQL 查询的方法,其中所有信息都将被展平并按层次排序,如下所示:
node 1, depth 0
node 2, depth 1
node 4, depth 2
node 3, depth 1
注意:我不能以任何方式修改数据库架构。我只能创建 SQL 查询。我也不能使用WITH
关键字,因为 MySQL 不支持它。有没有办法进行这样的查询?但是,深度二或以上的任何解决方案 都被认为足够好。
编辑:如果你喜欢实验,这里是SQL fiddle :)