在 SQLITE3 中使用 CTE 时出错
Error using CTE in SQLITE3
我使用这些代码来获取我的 parent/child 类别 table 的级别(深度)。和 isLeaf 属性:
with cteCat as (
select
id, parent,
[cteLevel] = 1
from Categories
where 1=1 and parent=0
union all
select
c.id, c.parent,
[cteLevel] = cc.cteLevel+1
from Categories c
join cteCat cc
on c.parent = cc.id
where 1=1
and c.parent <> 0
)
select
*
, CASE WHEN EXISTS (SELECT * FROM Categories c2 WHERE c2.parent = c1.id) THEN 0 ELSE 1 END AS IsLeaf
, (SELECT COUNT(*) FROM Categories c2 WHERE c2.parent = c1.id) AS Leafs
from cteCat c1
order by c1.id
结果是:
id parent cteLevel IsLeaf Leafs
1 0 1 0 2
....
在SQLSERVER 中没问题。但是当我在 sqlite 上执行时,我得到错误:
Error while executing SQL query on database 'ado':
no such column: cc.cteLevel
有什么帮助吗?谢谢。
SQLite 不支持这样的变量赋值。
但是,您应该可以使用标准 SQL:
WITH cteCat AS (
SELECT id,
parent,
1 AS cteLevel
FROM ...
WHERE ...
UNION ALL
SELECT c.id,
c.parent,
cc.cteLevel + 1
FROM ...
WHERE ...
)
SELECT ...
我使用这些代码来获取我的 parent/child 类别 table 的级别(深度)。和 isLeaf 属性:
with cteCat as (
select
id, parent,
[cteLevel] = 1
from Categories
where 1=1 and parent=0
union all
select
c.id, c.parent,
[cteLevel] = cc.cteLevel+1
from Categories c
join cteCat cc
on c.parent = cc.id
where 1=1
and c.parent <> 0
)
select
*
, CASE WHEN EXISTS (SELECT * FROM Categories c2 WHERE c2.parent = c1.id) THEN 0 ELSE 1 END AS IsLeaf
, (SELECT COUNT(*) FROM Categories c2 WHERE c2.parent = c1.id) AS Leafs
from cteCat c1
order by c1.id
结果是:
id parent cteLevel IsLeaf Leafs
1 0 1 0 2
....
在SQLSERVER 中没问题。但是当我在 sqlite 上执行时,我得到错误:
Error while executing SQL query on database 'ado':
no such column: cc.cteLevel
有什么帮助吗?谢谢。
SQLite 不支持这样的变量赋值。
但是,您应该可以使用标准 SQL:
WITH cteCat AS (
SELECT id,
parent,
1 AS cteLevel
FROM ...
WHERE ...
UNION ALL
SELECT c.id,
c.parent,
cc.cteLevel + 1
FROM ...
WHERE ...
)
SELECT ...