在没有PK的情况下从SQL表中删除记录

时间:2013-01-22 19:59:28

标签: mysql sql

我的userID中有一个名为itemorder的表:itemIDdatestatusnotesMYSQL 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

3 个答案:

答案 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);

DEMO SQL FIDDLE