【问题标题】:Delete mysql with join and limit使用 join 和 limit 删除 mysql
【发布时间】:2013-02-26 21:07:40
【问题描述】:

我有这样的 sql 查询:

DELETE `LINK_LA_TYP`
FROM
    `LINK_LA_TYP`
JOIN `LINK_ART` ON `LINK_LA_TYP`.LAT_LA_ID = `LINK_ART`.LA_ID
JOIN `ARTICLES` ON `LINK_ART`.LA_ART_ID = `ARTICLES`.ART_ID
WHERE
    (
        `ARTICLES`.ART_SUP_ID IN(
            10008,
            10439,
            11005,
             ...
             ...
            441
        )
    )
LIMIT 50000;

但我得到错误....从 mysql-doc 我得到了 delete+join+limit 我会得到错误....

但是我怎样才能更改我的代码? (对 mysql 和 sql 来说都是新的)。如何更改我的代码?限制要删除的行......

我也在 phpmyadmin 中得到

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用 靠近第 1 行的“限制 50”

【问题讨论】:

  • 您的查询太长而无法阅读(和调试)。删除不相关的数据并向我们展示查询的基本结构。无论如何,您不应该将那么多数据硬编码到查询中。
  • 来自文档 对于多表语法,DELETE 从每个 tbl_name 中删除满足条件的行。在这种情况下,不能使用 ORDER BY 和 LIMIT。 dev.mysql.com/doc/refman/5.0/en/delete.html
  • @MichaelBerkowski 我知道!给出如何解决的代码)
  • @Asad 它已经被编辑了......但是这个硬编码不是硬编码,这一切都很好......和其他方式没有
  • @brabertaser1992 你使用 LIMIT 的原因是什么?您没有ORDER BY,因此您的结果可能完全不可靠。

标签: mysql sql join limit


【解决方案1】:

来自文档 对于多表语法,DELETE 从每个 tbl_name 中删除满足条件的行。在这种情况下,不能使用 ORDER BY 和 LIMIT。 dev.mysql.com/doc/refman/5.0/en/delete.html – Michael Berkowski 2 分钟前

我同意这一点。此外, DELETE 命令不能有 LIMIT 子句。此外,一般来说,您不能从多个 JOINed 表中删除。

可以使用子选择来重写语句,例如:

delete from LINK_LA_TYP
where LAT_LA_ID in 
    (select LA_ID
    from LINK_ART
    join ARTICLES on ARTICLES.ART_ID = LINK_ART.LA_ART_ID
    where ARTICLES.ART_SUP_ID in (...));

【讨论】:

  • 那么怎么限制呢?如果在那种情况下,我只会限制 ARTICLES 或 LINK_ART
  • 我的立场是正确的。我有点老派(最初在 94 年学习 SQL),似乎 LIMIT 子句已添加到 DELETE 语句中。正如其他人所指出的,我也强烈建议将其与 ORDER BY 子句结合使用。否则,您 DELETE 最终将删除一组基本上随机的行(SQL 本质上是无序的)。
  • 在将表与其他表上的 id 链接起来时如何订购?
  • 也是无序的,随机是可以的,有一天我开始删除这 500 000 行,然后……直到它删除所有需要的数据,是好还是坏?
  • 是的,我以前也遇到过同样的问题。使用 LIMIT 将大的 DELETE 分成更小的块是一种应用程序,其中 LIMIT 将在没有 ORDER BY 的情况下使用。顺便说一句,如果打算清空整个表,您可能需要查看 TRUNCATE TABLE
猜你喜欢
  • 2014-07-27
  • 2021-01-18
  • 2017-09-07
  • 2021-11-03
  • 2010-10-13
  • 2011-02-15
相关资源
最近更新 更多