我在数据库中有一个表,该表有几列包含相同类型的数据,这些值允许为空。我需要将每个 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 。是否还有一种技术可以针对性能实现这一目标?
答案 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