【问题标题】:Multiple-table DELETE LIMIT多表删除限制
【发布时间】:2012-09-28 09:23:13
【问题描述】:

我正在尝试运行以下查询,但它会引发错误。

DELETE b 
FROM parim_lang a 
JOIN parim_lang b 
    ON b.lang_hash = a.lang_hash 
    AND b.lang_language = SUBSTRING(a.lang_google_translation, LOCATE('-', a.lang_google_translation) + 1)
WHERE a.lang_google_translation REGEXP '^[a-z]+-[a-z]+'
LIMIT 20

此查询无限制地工作..

错误如下:

SQL 错误 (1064):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 7 行的“LIMIT 20”附近使用正确的语法

找到这个:

对于多表语法,DELETE 从每个 tbl_name 中删除满足条件的行。在这种情况下,不能使用 ORDER BY 和 LIMIT。

我有什么解决方法吗?

【问题讨论】:

  • For the multiple-table syntax, DELETE deletes from each tbl_name the rows that satisfy the conditions. In this case, ORDER BY and LIMIT cannot be used.

标签: mysql sql sql-delete


【解决方案1】:

试试:

DELETE
FROM parim_lang a
WHERE a.lang_hash IN (
SELECT a.lang_hash 
FROM parim_lang a
JOIN parim_lang b 
    ON b.lang_hash = a.lang_hash 
    AND b.lang_language = SUBSTRING(a.lang_google_translation, LOCATE('-', a.lang_google_translation) + 1)
WHERE a.lang_google_translation REGEXP '^[a-z]+-[a-z]+' ) LIMIT 20

【讨论】:

  • SQL Error (1235): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery',我使用的是 5.5 版
  • 已编辑,现在它应该可以工作了(在我的电脑上工作的一个小查询示例)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2018-11-05
  • 2017-06-27
  • 2020-06-03
相关资源
最近更新 更多