2013-01-22 35 views
0

我有一個表,名爲itemorder有:userIDitemIDdatestatusnotes在我MYSQL DB。 表的PK是userID, itemID刪除記錄,而無需PK

我需要寫一個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)) 

它說:從我瞭解,我無法刪除的查詢WHERE不識別每行由它的PK錯誤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.

。我能做什麼? 我讀的主題Delete duplicate records from a SQL table without a primary key但是仍然無法計算如何將我的SELECT更改爲DELETE

+0

當你進入'首選項 - > SQL編輯器 - >查詢編輯器時會發生什麼?你看到像'禁用安全模式'的東西嗎? –

+0

你可以添加你測試Delete的確切SQL嗎? – woemler

+0

這是SQL還是MySQL? – Strawberry

回答

0

試試這個:

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

它應該工作

+0

它說的語法錯誤...與AS的東西...? –

+0

我更新了答案,檢查它並讓我知道它是否有效! – BackSlash

+0

它說語法錯誤意外的AS ...? –

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)) 
) 
+0

「YourPK」的語法是什麼?我寫了UserID和itemID。但它不起作用。它說錯誤代碼:1241.操作數應該包含1列(s) –

+0

MySQL顯然不支持where(col1,col2)in(select col1,col2 ...),所以你將不得不使用類似的東西:where userID&' - '&itemID in(select userID&' - '&itemID ... FROM itemorder ...) - 已編輯後 –

+0

這給出了另一個錯誤錯誤代碼: 1093.您無法在FROM子句 –

0

試試這個: DELETE FROM ITEMORDER WHERE status = 2 AND status <= (NOW() - INTERVAL 2 DAY);

DEMO SQL FIDDLE

+0

@ronnjack你可以讓我知道這是否適合你? –