我有一张大 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/