2012-11-19 76 views
-2

我有以下表結構:Mysql的幫助

狀態:TINYINT

locked_by:INTEGER

日期:DATETIME

頁:TINYINT

添加my_id :BIGINTEGER

主鍵(頁,添加my_id)

,並具有以下指標:

INDEX idx_col_lock_status(locked_by,狀態),

INDEX idx_my_id(添加my_id)

在某些時候,我們有以下幾行:

status, locked_by, date, page, my_id 

2  243  NULL 0  1 
0  0   NULL 1  1 
1  244  NULL 2  1 
2  255  NULL 0  2 
2  2556  NULL 1  2 
2  255  NULL 2  2 

我想更新所有行(設置狀態= 0,locked_by =) 有他們狀態值!= 2或

他們狀態值= 2 * *有

另一行與相同添加my_id有狀態!= 2

經過上述更新後,上面的行應該成爲。

status, locked_by, date, page, my_id 

0  0   NULL 0  1 --note this line 
0  0   NULL 1  1 
0  0   NULL 2  1 --and this line 
2  255  NULL 0  2 
2  2556  NULL 1  2 
2  255  NULL 2  2 

我正在使用Mysql版本5.1.63。

感謝

+0

是的我確定,檢查更新後行應該如何。 –

回答

0

應該這樣做:

CREATE TEMPORARY TABLE tt(my_id int); 
INSERT INTO tt SELECT my_id FROM yourTable WHERE status != 2); 

UPDATE yourTable yt 
SET yt.status = 0, yt.locked_by = 0 
WHERE status != 2 
OR 
(status = 2 AND EXISTS (SELECT 1 FROM tt WHERE yt.my_id = tt.my_id)); 

DROP TABLE tt; 

你必須在這裏與臨時表的工作,因爲你不能使用同一個表的更新和子查詢。