首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite / MySQL兼容性问题

SQLite / MySQL兼容性问题
EN

Stack Overflow用户
提问于 2017-05-22 15:00:56
回答 1查看 268关注 0票数 0

我知道SQLite中的SQL不是完全按照MySql的方式实现的。以下查询的问题是,它们不兼容,我希望避免使用条件if <DBMS> ... else

SQLite查询

代码语言:javascript
复制
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查询(改编自这里)

代码语言:javascript
复制
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='#‘key IN (选择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中找到。

也许有一种不同的方法?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-22 16:32:28

第一个命令从子查询中的key表读取sorties值,然后检查外部语句中的sorties表中是否存在这些键值。该检查是多余的;您可以直接将这些值与reports中的值进行比较:

代码语言:javascript
复制
UPDATE sorties
SET state = '#'
WHERE key IN (SELECT sortieId
              FROM reports);

至于第二个命令,SQLite不支持对INSERT/UPDATE/DELETE中使用的表进行混叠,因为这些命令只在单个表上工作。您只需删除AS s并将s替换为无处不在的sorties

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44116240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档