-2

我有以下表结构:

状态:TINYINT

锁定方式:整数

日期:日期时间

页面:TINYINT

my_id: 比金特格

主键是(页面,my_id)

并具有以下索引:

INDEX idx_col_lock_status (locked_by, status),

索引 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。

谢谢

4

1 回答 1

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;

您必须在此处使用临时表,因为您不能将同一个表用于更新和子查询。

于 2012-11-19T15:07:28.643 回答