/ / Błąd przy użyciu metody CTE w SQLITE3 - sql, sqlite3, common-table-expression

Błąd przy użyciu metody CTE w SQLITE3 - sql, sqlite3, common-table-expression

Używam tych kodów, aby uzyskać poziom (głębokość) mojej tabeli kategorii dla rodziców / dzieci. i atrybut 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

Wynik to:

 id     parent  cteLevel    IsLeaf  Leafs
1      0       1           0       2
....

to jest OK w SQLSERVER, ale gdy wykonuję w sqlite, pojawia się błąd:

Error while executing SQL query on database "ado":
no such column: cc.cteLevel

Jakaś pomoc? dzięki.

Odpowiedzi:

1 dla odpowiedzi № 1

SQLite nie obsługuje takich przypisań zmiennych.

Jednak powinieneś być w stanie zrobić to samo ze standardowym 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 ...