我知道它可以通过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?
答案 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中。