我希望我记得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)
我该怎么办?
答案 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