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

时间:2017-09-28 16:34:52

标签: mysql

我有一张包含人物信息的大桌子。每条记录都有一个ID,并由其他表引用。我注意到很多记录都有重复的密钥,但它们在其他字段中的信息量有所不同。我想将各个领域的信息合并为一个,并使其成为' master'记录以及对其他记录的所有引用都需要用主记录替换。

一个例子

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

我需要以值记录单个记录(id为1,2或3) key1 = 1,key2 = 2,name = John,city = Town,dob = 70/09/12。

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

1 个答案:

答案 0 :(得分:0)

您可以使用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
相关问题