将行拆分成多行 - 替换为union?

时间:2017-05-07 15:11:54

标签: mysql sql union

我知道它可以通过union完成,但有点重复 - 那么有没有办法将每一行的多列拆分成多个单列行?

示例:

SPLIT(SELECT col1,col2,col3 FROM tbl);

SPLIT是我想象中的功能,用于:

SELECT col1 FROM tbl
UNION
SELECT col2 FROM tbl
UNION
SELECT col3 FROM tbl;

那么,是否有相应的UNION / SPLIT?

1 个答案:

答案 0 :(得分:2)

首先,您应该使用union all - 除非您打算承担删除重复项的开销:

SELECT col1 FROM tbl
UNION ALL
SELECT col2 FROM tbl
UNION ALL
SELECT col3 FROM tbl;

以上要求扫描表3次。您只需使用CROSS JOIN扫描一次表,但逻辑稍微麻烦一点:

SELECT (CASE col WHEN 1 THEN col1 WHEN 2 THEN col2 WHEN 3 THEN col3 END) as col
FROM tbl CROSS JOIN
     (SELECT 1 as col UNION ALL SELECT 2 UNION ALL SELECT 3) x;

我应该注意到其他数据库支持unpivot和横向连接,其中任何一个都可以用于此目的。但是,这些结构不在MySQL中。