我有一张包含人物信息的大桌子。每条记录都有一个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。
是否有一种巧妙的方法来合并这些记录而不对每个字段进行测试(我的实际表有很多字段)?
答案 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