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

一个例子

| 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,名称= 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/

10-14 11:54
查看更多