在UPDATE SQL查询中使用LIMIT offset或OFFSET是什么意思?

8

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

| 0 | X  |
| 1 | X  |
| 2 | X  |
| 3 | Y  |
| 4 | Y  |
| 5 | X  |
| 6 | X  |
| 7 | Y  |
| 8 | Y  |
| 9 | X  |

我想要将前两个出现的 X 替换为 X1,然后将接下来的四个出现替换为 X2,这样生成的表格如下所示:
| 0 | X1 |
| 1 | X1 |
| 2 | X2 |
| 3 | Y  |
| 4 | Y  |
| 5 | X2 |
| 6 | X2 |
| 7 | Y  |
| 8 | Y  |
| 9 | X2 |

当然,问题中的表格要大得多,因此出现的次数也更高,因此手动编辑不是一个解决方案。
我想做这样的事情:
UPDATE表格 SET列='X' WHERE列='X2' LIMIT 90,88
但不幸的是,MySQL似乎不支持UPDATE查询中的OFFSET...有没有办法做到这一点?
2个回答

12

我不知道您的表中是否有id字段可用,但您可以使用WHERE id BETWEEN 88 AND 90,MySQL不支持Update查询中的Offset,但您可以使用限制条件BETWEEN命令来实现。


10

尝试这个:

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);


3
这个版本的MariaDB还不支持带有'LIMIT & IN/ALL/ANY/SOME子查询'的功能。 - Viktor Joras
1
我曾经遇到过同样的问题,但是因为我跳过了第一个(外部)select语句。两个都检索id的事实是对这个限制的一种变通方法。 - Sergio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接