2015-09-28 42 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'就是这样做的。 –