2013-02-26 41 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