删除语句的MySQL限制
我为最近遇到的一个错误整理了一个测试表。它涉及在试图从MySQL表中删除单个记录时使用LIMIT 我所说的错误是“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行“LIMIT 1”附近使用的正确语法。” 我放在一起的表格叫做test;它有3列,id、name和created。我用几条记录填充了表,然后试图删除一条记录。下面是我用来尝试和实现这一点的陈述删除语句的MySQL限制,mysql,limit,sql-delete,Mysql,Limit,Sql Delete,我为最近遇到的一个错误整理了一个测试表。它涉及在试图从MySQL表中删除单个记录时使用LIMIT 我所说的错误是“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行“LIMIT 1”附近使用的正确语法。” 我放在一起的表格叫做test;它有3列,id、name和created。我用几条记录填充了表,然后试图删除一条记录。下面是我用来尝试和实现这一点的陈述 从测试t中删除t,其中t.name='foo'限制1 如果不使用limit1,语句的执行就很好,但是如果没有必要
从测试t中删除t,其中t.name='foo'限制1
如果不使用limit1,语句的执行就很好,但是如果没有必要,我当然不会使用LIMIT
我完全知道我可以使用另一条语句成功完成此删除。见下文:
从测试中删除,其中name='foo'限制1
然而,我的问题集中在为什么第一个语句没有限制
所以我的问题是,我对第一个产生这个错误的语句做了什么错误的处理 delete查询只允许delete“命令”后的修饰符告诉数据库什么/如何处理事情 请参见简单使用
DELETE FROM test WHERE 1= 1 LIMIT 10
使用
row\u count-所需的偏移量
如果我们有10行,想要偏移3
10 - 3 = 7
现在,查询delete from table,其中this=订单asc limit 7
保留最后3个,而order desc
保留前3个:
$row_count - $offset = $limit
Delete from table where entry = criteria order by ts asc limit $limit
@安德烈:如果我理解你的要求,我想我唯一缺少的就是t.*在
之前,我先和一个
从…中删除。。。使用。。。其中查询,。。。
因为我想先测试一下
所以我试着选择从。。。使用。。。哪里
这导致了一个错误。。。
然后我想通过添加
限制10
这也产生了一个错误
然后我取消了“限制”,万岁了,它成功了:
“删除1867行。(查询耗时1.3025秒)。”
问题是:
DELETE FROM tableX
USING tableX , tableX as Dup
WHERE NOT tableX .id = Dup.id
AND tableX .id > Dup.id
AND tableX .email= Dup.email
AND tableX .mobil = Dup.mobil
这起作用了。来自:
通过使用派生表可以解决此问题
DELETE t1 FROM test t1 JOIN (SELECT t.id FROM test LIMIT 1) t2 ON t1.id = t2.id
由于限制位于派生表内,因此联接将只匹配一行,因此查询将只删除此行。“但是,在多表删除中不能使用ORDER BY或LIMIT”。这似乎回答了我的问题。是的-对不起,我没有从OP中读到这一点,但您关于从联接中删除的说法是正确的OP明确表示他知道这是有效的…”“我完全知道我可以使用另一条语句成功完成此删除。[…]DELETE from test WHERE name='foo'LIMIT 1
”我不能使用delete from
,因为我需要加入数据。为什么使用where 1=1?我对你的答案投了反对票,因为它不是关于实际主题的答案。请看上面的问题。
You cannot use ORDER BY or LIMIT in a multiple-table DELETE.
DELETE t1 FROM test t1 JOIN (SELECT t.id FROM test LIMIT 1) t2 ON t1.id = t2.id