我有一个这样的表,我想消除空值
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
有人可以帮忙......谢谢!
答案 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
。