在SQLITE3中使用CTE时出错

时间:2015-03-11 05:59:29

标签: sql sqlite common-table-expression

我使用这些代码来获取父/子类别表的级别(深度)。和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

有任何帮助吗?感谢。

1 个答案:

答案 0 :(得分:1)

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 ...