我有一个具有这种嵌套结构的 SQL 表:
CREATE TABLE items (`id` INTEGER, `item_name` VARCHAR(6), `parent_id` INTEGER, `list_order` INTEGER);
我的 SQLite 版本不支持窗口函数,目前我在链接SQLite 查询中的查询返回结果如下,但它不是根据 list_order 排序的,另一个细节是 list_order 列可能所有值都为零。
id name_item parent_id level path_index list_order
---------------------------------------------------------------
1 Pois 0 0 1 4
2 Então 0 0 2 5
3 Teste 0 0 3 3
11 Teste 3 3 1 3.1 2
12 Teste 2 3 1 3.2 0
13 Teste 1 3 1 3.3 1
4 Fundo 0 0 4 2
7 Profundo 4 1 4.1 1
8 Dhdhd 4 1 4.2 0
9 Gagagaga 8 2 4.2.1 1
10 Fsfsfsfs 8 2 4.2.2 0
5 Profundo 0 0 5 1
6 Gigante 0 0 6 6
14 Teste 0 0 7 0
我希望 path_index 列遵循 list_order 和 level 列,如下所示:
id name_item parent_id level path_index list_order
---------------------------------------------------------------
14 Teste 0 0 1 0
5 Profundo 0 0 2 1
4 Fundo 0 0 3 2
8 Dhdhd 4 1 3.1 0
10 Fsfsfsfs 8 2 3.1.1 0
9 Gagagaga 8 2 3.1.2 1
7 Profundo 4 1 3.2 1
3 Teste 0 0 4 3
12 Teste 2 3 1 4.1 0
13 Teste 1 3 1 4.2 1
11 Teste 3 3 1 4.3 2
1 Pois 0 0 5 4
2 Então 0 0 6 5
6 Gigante 0 0 7 6
如何对齐根据 list_order 和 level 列排序的 path_index?
下一个查询可以执行所需的排序:
https://dbfiddle.uk/?rdbms=sqlite_3.27&fiddle=a7957edeabb5a9a1c9dff2d2e92ffe0c
如果存在
list_order
上述值,9
则必须对其值应用零填充表达式。例如https://dbfiddle.uk/?rdbms=sqlite_3.27&fiddle=52d6d43db054cb64754c37d3820c0b1e
https://dbfiddle.uk/?rdbms=sqlite_3.27&fiddle=728695f41db0913bcde76370f70c885a