【问题标题】:MySQL: Combine two rows into one row?MySQL:将两行合并为一行?
【发布时间】:2019-11-12 14:17:46
【问题描述】:

如何将同一张表中的两行合并为一行以避免出现空字段?例如,如果我有以下两行:

id col1 col2 col3
 1   12   null 13  
 2   56   74   89

我想得到结果:

1 12 74 13

换句话说,我想要 id = 1 的行中的值,但如果它有 null 值,我想用 id = 2 的行中的相应值替换那些 nulls。我猜另一个限制是该表中的列数很大,所以我想避免列出各个列。使用 MySQL 是否可以做到这一点?

【问题讨论】:

  • 如果您也有 id 为 3 、 4 、 5 和 6 的记录......结束等等......跨度>
  • @RaymondNijland 这只是一个示例,但您可以认为第 2 行是一组默认值,而第 1 行是单个用户的值...如果用户没有值,我们插入在默认值中
  • 很公平,但我认为理想情况下,您的问题更多是关于如何将具有奇数和偶数 id 的记录合并为一条记录,对吗?更多记录的结果应该是什么,您是否可以添加该案例以及两个记录示例数据对于您的用户案例有很好的感觉...
  • 我和雷蒙德在一起。请在您的示例中添加更多行,并为我们提供如何为任何其他行查找默认行的规则(例如是什么让您选择第 2 行作为第 1 行的默认行?)。
  • 这是架构设计不佳的高度症状

标签: mysql sql join self-join


【解决方案1】:

你可以使用left join:

select coalesce(t.col1, t2.col1) as col1,
       coalesce(t.col2, t2.col2) as col2,
       coalesce(t.col3, t2.col3) as col3       
from t left join
     t t2
     on t2.id = 2
where t.id = 1

【讨论】:

  • 有没有办法避免列出列?
  • @Gdgames Gamers:没有。但这有什么问题?
  • @GdgamesGamers 。 . .我不这么认为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 2014-02-02
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多