我如何在mysql中将表与null行合并

时间:2015-02-27 23:30:16

标签: mysql

我有一个这样的表,我想消除空值

id  myname yourname message
1   anna     null    hi
2   null     john    hi
3   anna     null    hello
4   null     john    hello

第1行& 2实际上是描述相同的事件,第3行和第3行也是如此。 4.

这就是我想要的

id  myname yourname message
1   anna    john   hi
2   anna    john    hello

有人可以帮忙......谢谢!

3 个答案:

答案 0 :(得分:0)

如果您知道合并只有两条记录,则可以MAX()使用GROUP BY

SELECT MAX(myname) as me, MAX(yourname) as you, message
FROM theTable
GROUP BY message

答案 1 :(得分:0)

首先将yourname复制到具有空值的行中:

UPDATE message_table m1
JOIN message_table m2 ON m1.message = m2.message
SET m1.yourname = m2.yourname
WHERE m1.yourname IS NULL;

然后使用myname = NULL删除行:

DELETE FROM message_table
WHERE myname IS NULL;

答案 2 :(得分:0)

您可以使用case进行聚合。这将适用于您的特定情况:

select (@rn := @rn + 1) as id,
       max(myname) as myname, max(yourname) as yourname, max(message) as message
from table t cross join (select @rn := 0) vars  
group by (case when t.id in (1, 2) then 1 else 2 end);

如果您知道消息相同,则可以按此汇总。但是,在您的问题中,您似乎建议逻辑基于id而不是message