Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在多个DML语句中引用Sqlite CTE吗?_Sql_Sqlite_Common Table Expression - Fatal编程技术网

我可以在多个DML语句中引用Sqlite CTE吗?

我可以在多个DML语句中引用Sqlite CTE吗?,sql,sqlite,common-table-expression,Sql,Sqlite,Common Table Expression,在一条语句中,我想更新一组行并删除另一组行,这两组行都基于某些CTE。然而,当我执行它时,第二个DML,DELETE,抱怨好像CTE不再可用。这在Sqlite中是不可能的吗 我看了一下,但我唯一发现的是在警告部分,那是关于复合语句的,这不是我在这里要做的 这是我的SQL,删除了CTE的内容,因为其中包含一些专有内容,而且我认为这与问题无关(如果不正确,请告诉我): 我还尝试在begintransaction中包装上述内容和提交事务但这没有帮助 错误消息是:“没有这样的表:cteOldAboutC

在一条语句中,我想更新一组行并删除另一组行,这两组行都基于某些CTE。然而,当我执行它时,第二个DML,DELETE,抱怨好像CTE不再可用。这在Sqlite中是不可能的吗

我看了一下,但我唯一发现的是在警告部分,那是关于复合语句的,这不是我在这里要做的

这是我的SQL,删除了CTE的内容,因为其中包含一些专有内容,而且我认为这与问题无关(如果不正确,请告诉我):

我还尝试在
begintransaction中包装上述内容
提交事务但这没有帮助


错误消息是:“没有这样的表:cteOldAboutCmds”。

CTE是单个SQL语句的一部分,这几乎就是它的全部要点


要使命名查询可用于多个语句,请使用。如果您不想影响其他连接,请使用临时视图。

CTE是单个SQL语句的一部分,这几乎就是它的全部要点


要使命名查询可用于多个语句,请使用。如果您不想影响其他连接,请使用临时视图。

我已经接受了CL的答案,但我想格式化我最终使用的代码,以利于其他人:

begin transaction;

create temp view OldAboutCmds as
select *
from...;

create temp view Frequency as
select...;

create temp view NewAboutCmdMaster as
select...;

update cmds 
set ...
where ...;

delete 
from cmds
where ...;

commit transaction;

drop view OldAboutCmds;
drop view Frequency;
drop view NewAboutCmdMaster;

我已经接受了CL的回答,但为了他人的利益,我想格式化我最终使用的代码:

begin transaction;

create temp view OldAboutCmds as
select *
from...;

create temp view Frequency as
select...;

create temp view NewAboutCmdMaster as
select...;

update cmds 
set ...
where ...;

delete 
from cmds
where ...;

commit transaction;

drop view OldAboutCmds;
drop view Frequency;
drop view NewAboutCmdMaster;

否,
通用表表达式
只能由紧跟其后的命令引用。也许您可以创建一个临时表。不,
通用表表达式
只能由紧接着的以下命令引用。也许您可以创建一个临时表。谢谢,这让我找到了所需的解决方案。我也将回答我自己的问题,只是为了向其他人展示我的最终SQL,使用评论中不可用的格式化功能…谢谢,这让我找到了我需要的解决方案。我也将回答我自己的问题,只是为了向其他人展示我的最终SQL,使用注释中不可用的格式化功能…事务不是连接;您可能想放弃视图。谢谢您的建议。根据我的经验,Sqlite不会在事务完成后保留视图,而是本着清洁和完整的精神,以防我错了,它们会以某种方式保留,我添加了drop的。临时表/视图在连接期间保留。我刚刚想到,我通常会关闭连接,这可以解释这一点。事务不是连接;您可能想放弃视图。谢谢您的建议。根据我的经验,Sqlite不会在事务完成后保留视图,而是本着清洁和完整的精神,以防我错了,它们会以某种方式保留,我添加了drop的。临时表/视图在连接期间保留。我刚刚想到我通常会关闭连接,这可以解释这一点。