更新查询中的Mysql帮助

更新查询中的Mysql帮助,mysql,sql,Mysql,Sql,我有以下表格结构: 状态:TINYINT 锁定单位:整数 日期:日期时间 页码:TINYINT my_id:BIGINTEGER 主键是page,my_id 并具有以下指标: 索引idx\u col\u lock\u status locked\u by,status 索引idx\u我的\u id我的\u id 在某些情况下,我们有以下行: status, locked_by, date, page, my_id 2 243 NULL 0 1 0

我有以下表格结构:

状态:TINYINT

锁定单位:整数

日期:日期时间

页码:TINYINT

my_id:BIGINTEGER

主键是page,my_id

并具有以下指标:

索引idx\u col\u lock\u status locked\u by,status

索引idx\u我的\u id我的\u 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
我想更新所有行集合status=0,locked\u by= 具有其状态值的!=2或

它们的状态值为2*但有*

具有相同my_id且具有状态的另一行!=二,

在上述更新之后,上述行应变为

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

谢谢你,应该这样做:

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;

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

是的,我确定,请检查更新后的行应如何。