MySQL从多列选择值到单列

时间:2018-10-24 13:58:00

标签: mysql database

我在数据库中有一个表,该表有几列包含相同类型的数据,这些值允许为空。我需要将每个 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 个答案:

答案 0 :(得分: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