Mysql帮助更新查询

时间:2012-11-19 12:21:00

标签: mysql sql

我有以下表结构:

  

状态:TINYINT

     

locked_by:INTEGER

     

日期:DATETIME

     

页面:TINYINT

     

my_id:BIGINTEGER

     

PRIMARY KEY IS(page,my_id)

并具有以下索引:

  

INDEX idx_col_lock_status(locked_by,status),

     

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。

由于

1 个答案:

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

您必须在此处使用临时表,因为您无法使用同一个表进行更新和子查询。