2013-02-26 57 views
0

我有这样的SQL查询:删除MySQL的加入与和极限

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的,我得到的是与删除+加盟+极限,我会得到错误.. ..

但是我如何更改我的代码? (全新的mysql和sql)。如何更改我的代码?为了限制要删除的行....

在phpMyAdmin

而且我得到

1064 - 你在你的SQL语法错误;检查对应于你的MySQL服务器版本正确的语法使用 接近“极限50”在行1

+1

你的查询过长阅读(调试)。删除不相关的数据并向我们显示查询的基本结构。无论如何,你不应该将那么多数据硬编码到查询中。 – 2013-02-26 21:10:55

+1

来自文档_对于多表语法,DELETE从每个tbl_name删除满足条件的行。在这种情况下,不能使用ORDER BY和LIMIT._ http://dev.mysql.com/doc/refman/5.0/en/delete.html – 2013-02-26 21:13:06

+0

@MichaelBerkowski我知道!给代码如何解决它) – brabertaser19 2013-02-26 21:17:33

回答

1

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

我同意这一点。另外, DELETE命令不能有LIMIT子句。另外,一般而言,您不能从多个JOIN表中删除。

有可能改写使用子查询类似的语句:

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 (...)); 
+0

然后如何限制?如果在这种情况下,我只会限制ARTICLES或LINK_ART – brabertaser19 2013-02-26 21:34:31

+0

我会纠正。我有点老派(最初在94年学过SQL),而且似乎LIMIT子句已经被添加到DELETE语句中。正如其他人所指出的,我也强烈建议将它与ORDER BY子句结合起来。否则,DELETE将最终删除基本上随机的一组行(SQL本质上是无序的)。 – 2013-02-26 21:52:26

+0

我怎么能当它链接表与ID在其他表上? – brabertaser19 2013-02-26 22:05:15