我的userID
中有一个名为itemorder的表:itemID
,date
,status
,notes
,MYSQL DB
。
表的PK是userID, itemID
我需要编写一个SQL查询,它将删除所有2天前且状态= 2的行。 (这个SQL查询将每天在我的服务器上运行一次)。
我编写了以下sql查询:
SELECT *
FROM itemorder
WHERE
statusOrder=2
AND statusDate< (SELECT DATE_ADD(CURDATE(), INTERVAL -2 DAY))
查询返回与condition匹配的所有行。但是,如果我将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识别每一行。我能做什么?
我读了Delete duplicate records from a SQL table without a primary key主题,但仍无法知道如何将SELECT
更改为DELETE
。
答案 0 :(得分:0)
试试这个:
SET SQL_SAFE_UPDATES=0;
DELETE FROM itemorder WHERE statusOrder=2 AND datediff(now(), statusDate) > 2
应该有效
答案 1 :(得分: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))
)
答案 2 :(得分:0)
尝试这个:
DELETE FROM ITEMORDER WHERE status = 2 AND status <= (NOW() - INTERVAL 2 DAY);