Mic*_*ael 6 sqlite common-table-expression
SQLite 3.8.3增加了对CTE的支持.我在这个页面上尝试了一些示例CTE,它们工作正常.但是,在阅读文档并尝试调整一些示例后,我无法创建简单的测试.
首先,我创建一个包含两个字段的简单表:id和parent.这将创建一个简单的树或链接的记录列表:
CREATE TABLE test(id INTEGER PRIMARY KEY ASC,parent INTEGER);
Run Code Online (Sandbox Code Playgroud)
现在我用几行填充它:
INSERT INTO test (parent) VALUES (NULL);
INSERT INTO test (parent) VALUES (1);
INSERT INTO test (parent) VALUES (2);
INSERT INTO test (parent) VALUES (3);
Run Code Online (Sandbox Code Playgroud)
之后我有一个看起来像这样的表:
---+-------
id | parent
---+-------
1 | NULL
2 | 1
3 | 2
4 | 3
Run Code Online (Sandbox Code Playgroud)
现在我想生成沿3和1之间路径的行列表:
WITH RECURSIVE test1(id,parent) AS (
VALUES(3,2)
UNION ALL
SELECT * FROM test WHERE test.parent=test1.id)
SELECT * FROM test1;
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
no such column: test1.id
Run Code Online (Sandbox Code Playgroud)
双方test并test1有一个id场,为何还要求它不存在?我已多次查看文档,但没有看到我的错误.我究竟做错了什么?
有必要将test1表格包括在SELECT:
WITH RECURSIVE test1(id,parent) AS (
VALUES(3,2)
UNION ALL
SELECT test.id,test.parent FROM test,test1 WHERE test1.parent=test.id)
SELECT * FROM test1;
Run Code Online (Sandbox Code Playgroud)
注意该WHERE子句已被反转,问题中的原始测试从当前行返回到结束,而不是从结束返回到开始.
| 归档时间: |
|
| 查看次数: |
10245 次 |
| 最近记录: |