MySQL 在另一个字段中第一次出现某个值时设置标志

标签 mysql sql

我有以下记录集(is_unique 为空):

+-----+----------+-------------+
| id  | is_unique| val         |
+-----+----------+-------------+
| 1   | 1        | 100100      |
| 2   | 1        | 222111      |
| 3   | 0        | 100100      |
| 4   | 0        | 222111      |
| 5   | 1        | 311111      |
+-----+----------+-------------+

如何为 val 中值的每个第一次出现(关于 id)设置 is_unique = true?

最佳答案

使用用户变量:-

SET @prev:=0;

UPDATE someTable
SET is_unique=IF(@prev=val, 0, IF(@prev:=val, 1, 0 ))
ORDER BY val, id;

这将用户变量设置为 0(我假设 val 是一个整数字段)。然后进行更新,按 val 和 id 排序。如果@prev与val相同,则将is_unique设置为0,否则将其设置为检查val的当前值分配给@prev的结果。

SQL fiddle :-

http://www.sqlfiddle.com/#!2/6f9d50/1

关于MySQL 在另一个字段中第一次出现某个值时设置标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24535916/

相关文章:

mysql - 如何在主键上使用where子句?

mysql - 将 MySQL 警告转换为错误

sql - 将列表传递给 SQL 自定义类型

mysql - MAX(Column) 返回错误值

mysql - 使用 GROUP BY 的复杂查询和 MySQL 中的价格范围

MySQL 对查询返回的行进行计数和排序

sql - Hive Query,有什么好的方法可以优化这些并集?

MySQL - 可以调用函数来执行触发器操作吗?

如果另一个值不为空,则 mysql 更新值

mysql - 在选择查询的过程中读取 XML