UPDATE SQL查询中的LIMIT偏移量或OFFSET

Phi*_*yfi 5 mysql sql limit offset

我有一个类似于这样的表:

| 0 | X  |
| 1 | X  |
| 2 | X  |
| 3 | Y  |
| 4 | Y  |
| 5 | X  |
| 6 | X  |
| 7 | Y  |
| 8 | Y  |
| 9 | X  |
Run Code Online (Sandbox Code Playgroud)

我想替换前两次出现的Xwith X1,然后再出现4次出现,X2以便生成的表如下所示:

| 0 | X1 |
| 1 | X1 |
| 2 | X2 |
| 3 | Y  |
| 4 | Y  |
| 5 | X2 |
| 6 | X2 |
| 7 | Y  |
| 8 | Y  |
| 9 | X2 |
Run Code Online (Sandbox Code Playgroud)

有问题的表当然要大得多,因此出现次数也会更高,因此手动编辑不是解决方案.

我想做这样的事情:

UPDATE table SET column = 'X' WHERE column = 'X2' LIMIT 90, 88

但不幸的是MySQL在UPDATE查询中似乎不支持OFFSET ...有什么办法可以做到这一点吗?

Jes*_*run 8

尝试这个:

UPDATE table SET column = 'X1' WHERE id IN(SELECT id FROM (SELECT id FROM table WHERE column = 'X' LIMIT 2) as u);

进而

UPDATE table SET column = 'X2' WHERE id IN(SELECT id FROM (SELECT id FROM table WHERE column = 'X' LIMIT 4) as u);

  • 此版本的 MariaDB 尚不支持“LIMIT & IN/ALL/ANY/SOME 子查询” (2认同)

Chi*_*027 8

我不知道你是否在表中提供了id,但你可以使用WHERE id BETWEEN 88和90,MySQL在更新查询中不支持Offset,但你可以通过限制使用BETWEEN命令来实现