更新查询中的Mysql帮助
我有以下表格结构: 状态: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 在某些情况下,我们有以下行:更新查询中的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
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;
您必须在此处使用临时表,因为不能将同一个表用于更新和子查询。是的,我确定,请检查更新后的行应如何。