统一元组

时间:2018-02-28 16:28:45

标签: sql postgresql

我希望我记得SQL,这不是一个愚蠢的问题......:我将复杂查询的结果作为包含两个元素的元组,我想获得一个包含这些元素的联合的列表。我正在使用Postgresql,但我喜欢标准的SQL

所以,我有 选择foo作为结果

(field_1_1, field_1_2),
(field_2_1, field_2_2),
...

我想要

(field_1_1),
(field_1_2),
(field_2_1),
(field_2_2)

我该怎么办?

2 个答案:

答案 0 :(得分:1)

您可以使用unnest():

with my_table (col1, col2) as (
values
    ('f11', 'f12'),
    ('f21', 'f22')
)

select unnest(array[col1, col2])
from my_table;

 unnest 
--------
 f11
 f12
 f21
 f22
(4 rows)

或工会:

select col1
from my_table
union all
select col2
from my_table;

请注意,在没有ORDER BY子句的情况下,结果行的顺序是未定义的。

答案 1 :(得分:0)

我使用TRIM()函数只是为了从第二个元素中删除前导空格。

此作业没有标准的SQL方法,每个DMBS都有特定的功能。

create table tbl (foo text);
insert into tbl values
('field_1_1, field_1_2'),
('field_2_1, field_2_2');
✓

2 rows affected
select trim(from split_part(foo, ',', 1)) from tbl
union 
select trim(from split_part(foo, ',', 2)) from tbl;
| btrim     |
| :-------- |
| field_1_1 |
| field_1_2 |
| field_2_1 |
| field_2_2 |
select trim(from unnest(string_to_array(foo, ',')))
from   tbl;
| btrim     |
| :-------- |
| field_1_1 |
| field_1_2 |
| field_2_1 |
| field_2_2 |

dbfiddle here