我有以下表结构:
状态: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。
由于
答案 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;
您必须在此处使用临时表,因为您无法使用同一个表进行更新和子查询。