我知道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):两次将表“出动”指定为“UPDATE”的目标和单独的数据源
MySQL查询(改编自这里)
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语法错误:更新s SET s.state='#‘
keyIN (选择t.sortieId FROM (从报表中选择DISTINCT r.sortieId作为sortieId,作为r个内部连接程序)作为排序。key=r.sortieId)作为t);接近" AS ":语法错误异常名称: NS_ERROR_FAILURE异常消息:组件返回的失败代码: 0x80004005 (NS_ERROR_FAILURE) mozIStorageConnection.createStatement
我不知道如何使这个查询在这两个系统上平等地工作!
我只想知道,每个state of sorties必须是'#‘,当它是key时,可以在reports.sortieId中找到。
也许有一种不同的方法?
谢谢
发布于 2017-05-22 16:32:28
第一个命令从子查询中的key表读取sorties值,然后检查外部语句中的sorties表中是否存在这些键值。该检查是多余的;您可以直接将这些值与reports中的值进行比较:
UPDATE sorties
SET state = '#'
WHERE key IN (SELECT sortieId
FROM reports);至于第二个命令,SQLite不支持对INSERT/UPDATE/DELETE中使用的表进行混叠,因为这些命令只在单个表上工作。您只需删除AS s并将s替换为无处不在的sorties。
https://stackoverflow.com/questions/44116240
复制相似问题