MySQL select 将每个字段放在一个新行上
MySQL select to put every field on a new line
对于这个问题,假设我有一个 3 列 5 行的 table。
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'
不会反正也没什么用。有更好的方法吗?
简单的方法是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
子查询都将对基础 table 进行扫描。对于 5 行,这不是问题,但是当 table 有很多很多行时,有更有效的方法来做到这一点。
注意:我假设 "as a new line" 表示 "as a separate row in the query result set"。
编辑:
如果您想要按特定顺序排列的东西,则需要 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
对于这个问题,假设我有一个 3 列 5 行的 table。
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'
不会反正也没什么用。有更好的方法吗?
简单的方法是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
子查询都将对基础 table 进行扫描。对于 5 行,这不是问题,但是当 table 有很多很多行时,有更有效的方法来做到这一点。
注意:我假设 "as a new line" 表示 "as a separate row in the query result set"。
编辑:
如果您想要按特定顺序排列的东西,则需要 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