给定下面的表 mytable 示例:
+------+------+
| code | flag |
+------+------+
| 111 | 0 |
| 222 | 0 |
| 111 | 1 |
| 111 | 1 |
| 333 | 1 |
| 333 | 1 |
| 333 | 1 |
| 444 | 1 |
+------+------+
我想编写一个 SQL 查询来更新 flag = 0,其中 flag = 1 并且代码是不同的,因此它将产生以下输出:
+------+------+
| code | flag |
+------+------+
| 111 | 0 |
| 222 | 0 |
| 111 | 0 |
| 111 | 1 |
| 333 | 0 |
| 333 | 1 |
| 333 | 1 |
| 444 | 0 |
+------+------+
我尝试过的:
SET @codeid =( SELECT DISTINCT code FROM mytable WHERE flag = 1);
UPDATE mytable SET flag = 0 WHERE code IN (@codeid);
问题是@codeid需要1个单一值,我会得到更多抛出这个:
Subquery returns more than 1 row
我需要修改什么才能更新更多代码标志?
最佳答案
SQL 表表示无序集。你的问题似乎预设有一个顺序。
假设您有一个指定排序的列。如果是这样,您可以这样做:
update mytable t join
(select code, min(<ordercol>) as min_ordercol,
sum(flag = 0) as num_zeros
from mytable t
group by code
) tt
on t.code = tt.code
set t.flag = 0
where num_zeros = 0 and <ordercol> = min_ordercol;
如果您没有这样的列,您可以使用 alter table
添加一列。
关于mysql - SQL 更新标志,其中不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58500826/