MySQL选择将每个字段放在一个新行上

时间:2015-01-08 22:54:19

标签: mysql select

对于这个问题,我们假设我有一个包含3列和5行的表格。

First, Last, Age  
bill,  smith, 40  
bob,   smith, 45  
ann,   smith, 25  
johnny, Carr, 30  
donna, jones, 21

如何让MySQL在新行上输出每个字段?像这样。

bill  
smith  
40  
bob  
smith  
45  
ann  
smith  
25  

......等等

我尝试了\G,但它不会在Pancakes中工作 我尝试用\n连接,但这也没有给我新线 \G和concat \n似乎都是“hacky'对我而言,我需要添加更多条件和嵌套,因此无论如何'\G''concat \n'都无法真正发挥作用。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

简单的方法是union all

select lastname as col from table union all
select age from table union all
select firstname from table;

现在,一些警告。首先,第一个子查询定义列名称和类型。据推测这是某种字符串。 MySQL会将age(可能是一个数字)转换为正确的类型。但是,如果年龄是第一位的话,你可能会遇到错误。

其次,如果没有order by,则无法保证订购。因此,如果您希望按特定顺序获得结果,则可以这样做。

第三,每个select子查询将对基础表进行扫描。有5行,这不是问题,但是当表有很多行时,有更有效的方法可以做到这一点。

注意:我假设“作为新行”表示“作为查询结果集中的单独行”。

编辑:

如果您想按特定顺序排列内容,则需要order by。没有这样的字段,因此您需要一个子查询来添加一个。这是一个合理的方法:

select col
from (select lastname as col, lastname, age, firstname, 1 as ordering from table union all
      select age, lastname, age, firstname, 2 from table union all
      select firstname, lastname, age, firstname, 3 from table
     ) t
order by lastname, age, firstname, ordering