2015-09-28 44 views
5

刪除行我有這樣的查詢:如果行存在,那麼在MySQL

IF EXISTS(SELECT 1 FROM table1 WHERE col1 = ? LIMIT 1) THEN 
DELETE FROM table2 WHERE col2 = ? 
END IF 

但我不知道爲什麼上面的查詢不起作用。這也不起作用:

IF EXISTS(SELECT 1 FROM table1 WHERE col1 = ? LIMIT 1) BEGIN 
DELETE FROM table2 WHERE col2 = ? 
END 

MySQL告訴我有一個語法錯誤,我該如何解決它?

+4

MySQL(通常)不是過程式編程語言;你不能在過程之外使用'IF'語句。文檔確實說明了這一點。如果你真的要閱讀它,你也可以找到你的問題的答案。是否有某些原因導致您無法閱讀文檔? –

+0

是的。所以你幾乎堅持在應用程序邏輯中做'IF'。 –

+0

@LightnessRacesinOrbit其實我看到[這個答案](http://stackoverflow.com/questions/639854/check-if-a-row-exists-otherwise-insert#639874),並認爲也許有可能使用'IF'在mysql中!無論如何,好的謝謝。 – Shafizadeh

回答

8

您可以將條件轉換的DELETEWHERE子句來達到同樣的效果,像這樣:

DELETE FROM table2 
WHERE col2 = ? 
    AND EXISTS(SELECT 1 FROM table1 WHERE col1 = ? LIMIT 1) 

注意兩個?■找交換與地方相對於原始查詢。

+0

非常感謝,+1對你有幫助。 – Shafizadeh

+0

@Sajad據我所知,只有'limit 1'可以與MySql一起使用。 'TOP 1'是Sql Server語法([related](http://stackoverflow.com/q/5668540/335858))。 – dasblinkenlight

+0

'極限1'是不必要的; 'EXISTS'就是這樣做的。 –