获取多列的值,每列在自己的行上

时间:2019-04-26 11:36:49

标签: mysql

我有一个包含3个值的表:

id | name | v1   | v2   | v3 
---+------+------+------+---
 1 | John | 6    | null | 7
 2 | Jack | null | 5    | 9

是否有一种简单的方法来从v1v2v3的不同行中获取不同的值,最好没有null's?因此结果将是:

id | name | value
---+------+------
 1 | John |  6
 1 | John |  7
 2 | Jack |  5
 2 | Jack |  9

我想到的唯一查询是一个包含3个子查询的查询,因此也许有更好的方法可以做到这一点:

SELECT id, name, value 
FROM (
  (SELECT id, name, v1 value FROM table WHERE v1 IS NOT NULL)
   UNION ALL
  (SELECT id, name, v2 value FROM table WHERE v2 IS NOT NULL)
   UNION ALL
  (SELECT id, name, v3 value FROM table WHERE v3 IS NOT NULL)
) V
GROUP BY id, name, value

2 个答案:

答案 0 :(得分:1)

您不需要子查询和分组依据-只需UNION ALL就足够了

SELECT id, name, v1 value FROM table WHERE v1 IS NOT NULL
UNION ALL
SELECT id, name, v2 value FROM table WHERE v2 IS NOT NULL
UNION ALL
SELECT id, name, v3 value FROM table WHERE v3 IS NOT NULL

答案 1 :(得分:0)

很显然,如果您从这样的表设计开始,那么问题就变得微不足道了。

| id | v_id | value |
+----+------+-------+
|  1 |    1 |     6 | 
|  1 |    3 |     7 |
|  2 |    2 |     5 | 
|  2 |    3 |     9 |