mysql - SQL 更新标志,其中不同的值

标签 mysql sql

给定下面的表 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/

相关文章:

php - 在 PHP 中的日期格式之间转换给出错误

mysql - 为什么 mySQL 缺少一列?

mysql - 在 google mysql 上创建函数给出 "SUPER privilege and binary logging is enabled"错误

sql - 找出 SQL 中两个 24 小时制之间的小时差

mysql - Mysql 中的 Error#1221 是什么,是这个 SqlQuery 中的基本问题?

.net - 在 ASP.NET 中,如何在单击 gridview 单元格时编辑 gridview 单元格值?

php - 从服务器和数据库中删除文件 (PHP)

mysql - 如何在mysql中进行完全外连接

PHP $_GET 和 $_POST 代码不工作

mysql - 如何在 MySQL 表上添加自定义 CHECK 约束?