一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

MySQL/MariaDB中让查询结果多列合并成一列

时间:2016-08-12 编辑:简简单单 来源:一聚教程网

最近遇到一个查询需求,就是select多列时如何显示成一列--举例说就是假如表是3列2行:

1 2 3
4 5 6
如何让查询结果变成一列多行:

1
2
3
4
5
6
首先创建测试表

create table test(c1 int,c2 int,c3 int); 
insert into test values(1,2,3),(4,5,6),(7,8,9),(10,11,12); 

 

方法一:用union

select c1 from test union select c2 from test union select c3 from test; 

 

这种方法最易理解,就是查询三次,一次一个列,然后合并;但缺点就是扫描表3次

方法二:插入换行符

mysql -Bse "select concat(c1,'@@',c2,'@@',c3)from test ;" | sed 's/@@/\n/g' 

 

这种方法也较易理解,字段与字段之间插入换行符;相比第一种方法优点是只需访问表一次,缺点是需要借助外部文本处理工具

方法三:用case

select case when rownum=1 then c1 when rownum=2 then c2 when rownum=3 then c3 else ''  end    from  test,(SELECT @rownum:=@rownum+1 AS rownum FROM (SELECT @rownum:=0) r, test) b; 

 

这种方法是我同事shengkaisu想的,较难理解:生成行号rownum,然后生成的行号表和旧表做笛卡尔积,rownum为1就选第一列,rownum为2就选第二列...........

热门栏目