Database 如何将子查询分解为两个简单查询
我正在尝试一些方法来优化以下sql语句: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在子查询中表现不佳,请注
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。我试过你的方法,但是没有明显的性能改进。我会尝试其他方法。。