【问题标题】:Convert SQLITE to MYSQL将 SQLITE 转换为 MYSQL
【发布时间】:2020-01-31 16:24:24
【问题描述】:

有人可以帮我把它转换成 MYSQL,因为 MYSQL 不支持 IN 。我应该使用 INNER JOIN 吗?但是怎么做?

DELETE from SSLDOMAINS_logstable where id IN (SELECT id from SSLDOMAINS_logstable order by id asc limit 50)

【问题讨论】:

  • 因为 MYSQL 不支持 IN 这是不正确的。支持。
  • @Akina 我认为你错了。 MySQL DELETE Documentation 声明“您不能从表中删除并在子查询中从同一个表中进行选择。”
  • @stack_lech 研究fiddle。并尝试理解文档文本中 same 一词的含义。

标签: mysql sql sqlite sql-delete


【解决方案1】:

MySql中只需要ORDER BY子句和LIMIT:

DELETE FROM SSLDOMAINS_logstable 
ORDER BY id
LIMIT 50

此查询将删除按id升序排序的表的前50行。

【讨论】:

  • 如果 id 不是唯一的,那么您的查询结果将不同于 SQLite 上原始查询执行的结果。
  • 如果 id 不是唯一的.. 正确。所以这个要求需要 OP 来说明。
【解决方案2】:
DELETE t1.*
FROM SSLDOMAINS_logstable t1
JOIN ( SELECT t2.id 
       FROM SSLDOMAINS_logstable t2
       ORDER BY id ASC 
       LIMIT 50 ) t3 ON t1.id = t3.id

如果 id 是唯一的(包括主要的),请参阅forpas 的解决方案。但如果不是……子查询选择至少 50 个 id 值,查询会删除具有这些 id 值的记录 - 即,在这种情况下 LIMIT 的工作方式类似于“LIMIT WITH TIES”

【讨论】:

  • 请在您的答案中添加一些/简短的解释。
  • @mattfreake 您在编辑期间丢失了参考链接。这是无法接受的。 PS。链接已恢复。
  • 这很有帮助,谢谢@Akina
猜你喜欢
  • 2011-04-22
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
相关资源
最近更新 更多