2017-07-31 94 views
0

我正在使用MySQL。我想刪除所有匹配chart_id = 12places.match_no > 104MySQL和刪除與INNER JOIN的幾行

無論如何,我的查詢不起作用。我看不出是什麼原因。

DELETE FROM matches 
    INNER JOIN places ON places.id = matches.place_id 
    AND places.match_no > 104 
WHERE matches.chart_id = 12 

這將導致一個錯誤:

SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的第2行

回答

2

「INNER JOIN ON處的地方」你需要指定要刪除表中的正確語法手冊來源:

DELETE m 
    FROM matches m INNER JOIN 
     places p 
     ON p.id = m.place_id AND p.match_no > 104 
    WHERE m.chart_id = 12; 

表名/別名在DELETEFROM之間。

這在documentation清楚地解釋說:

Multiple-Table Syntax

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] 
    tbl_name[.*] [, tbl_name[.*]] ... 
    FROM table_references 
    [WHERE where_condition] 
1

另一種選擇是:

DELETE FROM matches 
WHERE matches.chart_id = 12 and matches.place_id in 
(select place_id 
from places 
where match_no > 104 
) 
+0

這是快於@提供的其他方式GordonLinoff? – xms

+0

我猜Gordon總是會更快:) –

+0

我敢說,從效率的角度來看,解決方案是等價的 –

1

試試這個:

DELETE m 
    FROM matches m INNER JOIN 
    places p 
    ON p.id = m.place_id 
    WHERE m.chart_id = 12 AND p.match_no > 104