我知道SQLite中的SQL没有像在MySql中那样完全实现。我对以下查询的问题是,它们不兼容,我想避免使用条件if <DBMS> ... else
SQLite查询
UPDATE sorties SET state = '#'
WHERE `key` IN (
SELECT `key` FROM sorties
INNER JOIN reports AS r
ON r.sortieId=sorties.`key`);
MySQL上的错误:
SQL错误(1093):表'sorties'被指定两次,既作为'UPDATE'的目标又作为单独的数据源
MySQL查询(改编自here)
UPDATE sorties AS s SET s.state='#'
WHERE s.`key` IN (
SELECT t.sortieId FROM (
SELECT r.sortieId AS sortieId
FROM reports AS r
INNER JOIN sorties AS sort
ON sort.`key`=r.sortieId)
AS t);
SQLite上的错误:
SQLiteManager:可能的SQL语法错误:UPDATE sorties AS s SET s.state ='#' 在哪里。
key
IN(SELECT t.sortieId FROM( SELECT DISTINCT r.sortieId AS sortieId FROM报告AS r INNER JOIN出动AS排序 ON sort。key
= r.sortieId)AS t); [靠近“AS”:语法错误] 例外名称:NS_ERROR_FAILURE 异常消息:组件返回失败代码:0x80004005(NS_ERROR_FAILURE)[mozIStorageConnection.createStatement]
我无法弄清楚如何使这些查询在两个系统上同等运行!
我希望拥有的是,state
sorties
key
reports.sortieId
tf.global_variables_initializer()
abstract
abstract
时,char c = 0xFF;
printf("%d\n",c<<8);
的每个Node *startN = list->first;
printf("Node#%d.string = '%s', .next = '%d' \n",list->first->key, list->first->string, list->first->next->key);
^^^^^^^^^^^
// Same as startN->key !
//iterate through list
while(startN->next != NULL) {
printf("Node#%d.string = '%s', .next = '%d' \n",startN->key, startN->string, startN->next->key);
^^^^^^^^^^^
// So in first loop you print the same again.
startN = startN->next;
}
都必须为'{'}。
也许有不同的方法吗?
谢谢
答案 0 :(得分:0)
第一个命令从子查询中的key
表中读取sorties
值,然后检查外部语句中sorties
表中是否存在这些键值。那张支票是多余的;您可以直接将值与reports
中的值进行比较:
UPDATE sorties
SET state = '#'
WHERE key IN (SELECT sortieId
FROM reports);
对于第二个命令,SQLite不支持对INSERT / UPDATE / DELETE中使用的表进行别名,因为这些命令仅适用于单个表。您只需删除AS s
,然后将s
替换为sorties
。