mysql - 将 MySQL 中的非空重复行从多行减少到一
问题描述
我需要一个update
语句来解决 MySQL 表中重复项的一些问题。表结构如下所示。我需要一个 MySQL 语句,它将重复的值设置为NULL
除第一个之外的值,即具有最低 id 的值。这里的 id 是主键。
这是我所拥有的一个例子:
id name
1 foo
2 foo
3 bar
4 NULL
5 NULL
6 foo
7 bar
这是期望的结果:
id name
1 foo
2 NULL
3 bar
4 NULL
5 NULL
6 NULL
7 NULL
该表还有其他包含有用信息的列。因此,不能简单地删除该行。
解决方案
我会这样写:
UPDATE t JOIN
(SELECT name, MIN(id) as min_id
FROM t
GROUP BY name
) tt
ON t.name = tt.name and t.id > tt.min_id
SET t.name = NULL;
我认为使用JOIN
. 基本上,它说要找到每个 id 的最小 id name
。然后将所有其他行设置name
为NULL
。
推荐阅读
- javascript - Vue-router嵌套路由未加载我的组件页面
- c# - 将 Linq 结果转换为 CSV
- git - 需要集中式系统中不可能的工作流示例,例如分层模型
- visual-studio-code - VSCode:获取语言服务器中的编辑器内容
- r - 是否有一种最佳方法可以使用 data.table 创建一堆新列?
- apache - Apache 意外关闭。尽管更改了端口,错误仍然存在
- javascript - 如何从浏览器中的变量运行全局常量函数
- android - 是否可以在 Android 中自定义 Firebase Cloud Messaging 生成的令牌?
- mysql - sql删除多行不同的列
- ios - UIPageViewController 作为子视图,横向双页,纵向单页