0

我有一个名为 itemorder的表userID,在我的. 表的PK是itemIDdatestatusnotesMYSQL DBuserID, itemID

我需要编写一个 SQL 查询,该查询将删除所有 2 天前且状态 = 2 的行。(此 sql 查询将每天在我的服务器中运行一次)。

我编写了以下 sql 查询:

SELECT * 
FROM itemorder 
WHERE
  statusOrder=2
  AND statusDate< (SELECT DATE_ADD(CURDATE(), INTERVAL -2 DAY))

查询返回与条件匹配的所有行。但是,如果我将其更改SELECT *DELETE它不起作用。

这是代码

DELETE
FROM itemorder 
WHERE
  statusOrder=2
  AND statusDate<(SELECT DATE_ADD(CURDATE(), INTERVAL -2 DAY))

它说:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor -> Query Editor and reconnect.

从错误中我了解到我无法删除,因为查询WHERE不能通过它的 PK 识别每一行。我能做些什么?我阅读了主题从没有主键的 SQL 表中删除重复记录,但仍然不知道如何将我的更改SELECTDELETE.

4

3 回答 3

0

试试这个作为一种解决方法:

DELETE
FROM itemorder 
WHERE UserID & '-' & ItemID in (
SELECT UserID & '-' & ItemID FROM itemorder
WHERE statusOrder=2 AND statusDate<(SELECT DATE_ADD(CURDATE(), INTERVAL -2 DAY))
)
于 2013-01-22T20:17:54.447 回答
0

尝试这个: DELETE FROM ITEMORDER WHERE status = 2 AND status <= (NOW() - INTERVAL 2 DAY);

演示 SQL 小提琴

于 2013-01-22T20:50:57.467 回答
0

尝试这个:

SET SQL_SAFE_UPDATES=0;
DELETE FROM itemorder WHERE statusOrder=2 AND datediff(now(), statusDate) > 2

它应该工作

于 2013-01-22T20:02:30.477 回答