我试图在同一个WITH语句中同时拥有一个普通的表表达式和一个递归的表达式。作为递归的一个,取决于我想要普通表表达式的普通表达式。当我试图这样做时,它只是不起作用。首先使用递归表表达式。
SQLFiddle中的以下案例说明了问题:http://sqlfiddle.com/#!5/b5362/3063/0
以下代码可以正常使用:
WITH RECURSIVE dates(x) AS (
SELECT datetime('2015-01-01')
UNION ALL
SELECT datetime(x, '+1 MONTHS') FROM dates WHERE x<'2016-01-01'
)
,
testi AS (select * from supportContacts
order by id desc)
SELECT *
FROM dates;
但是当我从递归表语句开始时它不起作用,即下面的代码不起作用。
WITH testi AS (select * from supportContacts
order by id desc)
,
RECURSIVE dates(x) AS (
SELECT datetime('2015-01-01')
UNION ALL
SELECT datetime(x, '+1 MONTHS') FROM dates WHERE x<'2016-01-01'
)
SELECT *
FROM dates;
如果有人能告诉我是否可以先使用递归表语句,那么我会很高兴。在这种情况下,我会怎样做。
最诚挚的问候//亨利
答案 0 :(得分:0)
如果您使用的是RECURSIVE
,则必须在WITH
之后直接使用{<1}}。
根据SQL标准,这意味着以下CTE 中的任何可能是递归的(但如果实际存在任何一个,则需要它)。< / p>
(因此数据库必须自己找出是否有任何特定的CTE是递归的。因此,SQLite(以及许多其他DB)使这个词完全是可选的。)