mysql 从多列中选择值到单列中

Posted

技术标签:

【中文标题】mysql 从多列中选择值到单列中【英文标题】:mysql Select values from multiple columns into single column 【发布时间】:2018-10-24 13:57:59 【问题描述】:

我在数据库中有一个表,它有几列包含相同类型的数据,这些值允许为空。我需要将每个 non-null 值选择到单个值列中,这些值关心它们所源自的行的 identity

所以,对于一个看起来像这样的表:

+---------+------+--------+------+
|   Id    | name  | v1    | v2   | 
+---------+------+--------+------+
|    1    | eko  | aa     |  bb  |
|    2    | agus | null   |  cc  |
|    3    | eko  | dd     |  null|
|    4    | budi | aa     |  null|
|    5    | siti | ff     |  gg  |
+---------+------+--------+------+

我希望将 aa、bb、cc 等的每个值选择到单个列中。我的结果数据应如下表所示。

+-------+-------+-------+
| id    | name  | v     |
+-------+-------+-------+
|  1    | eko   | aa    |
|  1    | eko   | bb    |
|  2    | agus  | cc    |
|  3    | eko   | dd    |
|  4    | budi  | aa    |
|  5    | siti  | ff    |
|  5    | siti  | gg    | 
+-------+-------+-------+

我正在使用 mysql。在性能方面是否也有实现此目的的技术?

【问题讨论】:

你不是说| 1 | eko | bb | 是预期输出中的第二行吗? 谢谢,已编辑 【参考方案1】:

您可以只使用两个查询并使用两者的联合语句来附加两个集合:

Select id, v1 as v
From table 
where v1 is not null

union all

select id, v2 as v
from table
where v2 is not null

但要使这个动态(任意数量的 v...),您必须遍历列。见:mysql, iterate through column names

【讨论】:

以上是关于mysql 从多列中选择值到单列中的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 如何在多列 html 表中显示,单列 mysql 表

MySQL View 在单列中显示多列中的行

删除单列和多列同时重复值

使用包含选择器在多列中搜索

多列外键:将单列设置为 Null “ON DELETE”而不是全部

mysql单列索引多列索引的使用