0
Я использую эти коды для получения уровня (глубины) моей таблицы родительских/дочерних категорий. и атрибут IsLeaf:Ошибка при использовании CTE в SQLITE3
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
Любая помощь? Благодарю.
'[cteLevel] = 1 'недействительно SQL. Не уверен, поддерживает ли SQLite эти нестандартные '[', но насколько я знаю, он не поддерживает назначение таких переменных, если это не является нестандартным псевдонимом столбца, тогда вам нужно написать '1 как ctelevel' (и конечно, 'cc.ctelevel + 1 как cteLevel' во второй части) –