mysql - 通过合并信息删除 MySQL 中的重复行

标签 mysql

我有一张大 table ,上面有人员信息。每条记录都有一个 ID,并被其他表引用。我注意到很多记录都有重复的键,但它们在其他字段中的信息量有所不同。我想将各个字段中的信息合并为一个,并使“主”记录和对其他记录的所有引用都需要替换为主记录。

一个例子

| id | key1 | key2 | name | city | dob      |
|--- | ---- | ---- | ---- | ---- | -------- |
| 1  | 1    | 2    | John |      |          |
| 2  | 1    | 2    |      | Town |          |
| 3  | 1    | 2    | John |      | 70/09/12 |

我需要最终得到一 strip 有值的记录(id 是 1、2 或 3) key1 = 1,key2 = 2,姓名 = John,城市 = 城镇,出生日期 = 70/09/12。

是否有一种巧妙的方法来合并这些记录,而无需测试每个字段(我的实际表有很多字段)?

最佳答案

您可以使用MAX()来获取每个键的非空值。

SELECT key1, key2, MAX(id) AS id, MAX(name) AS name, MAX(city) AS city, MAX(dob) AS dob
FROM yourTable
GROUP BY key1, key2

如果行之间可以有不同的值,并且您不想包含它们,则可以添加:

HAVING COUNT(DISTINCT NULLIF(name, ''), NULLIF(city, ''), NULLIF(dob, '')) = 1

关于mysql - 通过合并信息删除 MySQL 中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46474190/

相关文章:

mysql - SQL查询: NULL values that should not be NULL when using aggregate function with left join

mysql - 将表 a 中的多列连接到表 b 中的一列

mysql - phpMyAdmin Magento 价格更新

mysql - 名称错误 : cannot load Java class com. mysql.jdbc.Driver

java - 在Android Studio上将数据插入mysql

PHP MySQL 不将数据插入数据库并将产品 ID 返回为 0

mysql - 如何使用连接在 Laravel 中根据 id 获取特定数据?

php - 试图在一个小时内取60个点的平均值,然后以图表形式输出

mysql - 事件记录表_存在吗?句法

php - 如何通过 PHP 从数据库中获取组中的总用户数