Database 如何将子查询分解为两个简单查询

Database 如何将子查询分解为两个简单查询,database,sqlite,subquery,Database,Sqlite,Subquery,我正在尝试一些方法来优化以下sql语句: exe_sql "DELETE FROM tblEvent_type WHERE eguid in (SELECT rowid FROM tblEvent_basic WHERE sguid=11);"; exe_sql "DELETE FROM tblEvent_group WHERE eguid in (SELECT rowid FROM tblEvent_basic WHERE sguid=11);"; 据说sqlite3在子查询中表现不佳,请注

我正在尝试一些方法来优化以下sql语句:

exe_sql "DELETE FROM tblEvent_type WHERE eguid in (SELECT rowid FROM tblEvent_basic WHERE sguid=11);";
exe_sql "DELETE FROM tblEvent_group WHERE eguid in (SELECT rowid FROM tblEvent_basic WHERE sguid=11);";
据说sqlite3在子查询中表现不佳,请注意,上面两个sql执行了从tblEvent_basic中选择rowid,其中sguid=11`两次,因此我想尝试将子查询拆分为如下内容:

result =  exe_sql "(SELECT rowid FROM tblEvent_basic WHERE sguid=11);";
          exe_sql "DELETE FROM tblEvent_type WHERE eguid in  (result)
          exe_sql "DELETE FROM tblEvent_group WHERE eguid in (result)
如何才能做到这一点?我不知道如何将parmater结果绑定到sqlite中的following station

"DELETE FROM tblEvent_group WHERE eguid in (?) #how to bind result here

我直接使用sqlite3 C API。

您实际上需要通用表表达式CTE,但SQLite不支持这一点

另一种选择是将第一个查询的结果存储在临时表中,然后在两个delete语句中使用该表:

CREATE TEMP TABLE items AS SELECT rowid FROM tblEvent_basic WHERE sguid=11

DELETE FROM tblEvent_type WHERE eguid in  (select rowid from items)
DELETE FROM tblEvent_group WHERE eguid in (select rowid from items)

DROP TABLE items

DROP表是可选的,因为该表仅在与数据库的连接期间存在。

您从什么环境调用它?您正在使用哪种语言和数据库访问框架?我正在嵌入式系统上使用sqlite3 C API。没有数据库访问框架。您的意思是从tblEvent_类型中删除,其中eguid在select rowid FROM items中?在sqlite3中,从eguid所在的tblEvent_组中删除sql似乎是不合法的items@pier你说得对。我修好了。复制/粘贴相关错误:谢谢,activa。我试过你的方法,但是没有明显的性能改进。我会尝试其他方法。。