0

私はitemorder という名前のテーブルを持っています: userID, itemID, date, . テーブルのPKはstatusnotesMYSQL DBuserID, itemID

2 日経過し、ステータス = 2 のすべての行を削除する SQL クエリを作成する必要があります (この SQL クエリは、私のサーバーで 1 日 1 回実行されます)。

次の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 テーブルから重複レコードを削除するトピックを読みましたが、自分SELECTをに変更する方法をまだ理解できませんでしたDELETE

4

3 に答える 3

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 に答える
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 に答える