2011-05-24 82 views
33

我为最近遇到的错误放了一个测试表。它涉及在尝试从MySQL表中删除单个记录时使用LIMIT。DELETE语句上的MySQL LIMIT

我说的错误是“您的SQL语法错误;检查对应于你的MySQL服务器版本使用附近的‘LIMIT 1’在行正确的语法手册1

把我放在一起的表称为测试;它有3列,id,名称创建。我用几条记录填充表格,然后尝试删除一条记录。以下是我用来试图完成这一点的陈述。

DELETE t FROM test t WHERE t.name = 'foo' LIMIT 1

不使用LIMIT 1的,则执行该语句就好了,当然,如果没有需要它,我不会使用限制。

我完全知道我可以使用其他语句来成功完成此DELETE。见下: DELETE FROM test WHERE name = 'foo' LIMIT 1

但是我的问题集中在为什么第一个声明不与LIMIT工作。

所以我的问题是,我做了错误的关于第一个语句产生这个错误?

回答

18

删除查询只允许DELETE'命令'后的修饰符告诉数据库什么/如何处理事情。

看到this page

+10

“但是,您不能在多表DELETE中使用ORDER BY或LIMIT”。 这似乎回答我的问题。 – Andre 2011-05-24 15:06:13

+1

是的 - 抱歉没有从OP读取,但你怎么说从关节删除是正确的 – 2011-05-24 15:17:03

24

只需使用

DELETE FROM test WHERE 1= 1 LIMIT 10 
+1

OP明确表示,他知道这是工作......“我完全知道我可以使用另一种说法[...] DELETE FROM test WHERE name ='foo'LIMIT 1'“ – 2015-03-05 15:59:43

2

使用row_count - your_desired_offset

所以,如果我们有10行,并希望以抵消3

10 - 3 = 7 

现在查询delete from table where this = that order asc limit 7保持最后3和order desc来ke EP第3:

$row_count - $offset = $limit 

Delete from table where entry = criteria order by ts asc limit $limit 
4
DELETE t.* FROM test t WHERE t.name = 'foo' LIMIT 1 

@Andre如果我明白你的要求,我觉得唯一缺少的是T * FROM之前。