如何在PostgreSQL中按列组合/合并两个select查询?
我想按列而不是按行合并/合并两个select查询,如UNION所示 假设我有如何在PostgreSQL中按列组合/合并两个select查询?,sql,postgresql,Sql,Postgresql,我想按列而不是按行合并/合并两个select查询,如UNION所示 假设我有 SELECT attr1, attr2 FROM table1 及 请注意,两个表具有相同的属性名称 我想要一个包含以下列的结果: attr1_table1, attr2_table1, attr1_table2, attr2_table2 编辑(仅针对下一个,因为外部联接工作正常): 我的第一次选择返回如下内容: id attr1 attr2 1 3 5 2 4 6 我的第二个选
SELECT attr1, attr2 FROM table1
及
请注意,两个表具有相同的属性名称
我想要一个包含以下列的结果:
attr1_table1, attr2_table1, attr1_table2, attr2_table2
编辑(仅针对下一个,因为外部联接工作正常):
我的第一次选择返回如下内容:
id attr1 attr2
1 3 5
2 4 6
我的第二个选择
id attr1 attr2
1 7 9
2 8 10
我期望的结果是:
id attr1 attr2 attr1 attr2
1 3 5 7 9
2 4 6 8 10
谢谢你的问题很模糊。但是一个可能的答案是交叉连接:
select t1.attr1 as attr1_1, t1.attr2 as attr2_1,
t2.attr1 as attr1_2, t2.attr2 as attr2_2
from table1 t1 cross join
table2 t2;
交叉连接会非常危险,因为它会产生大量数据。例如,如果表1和表2各有1000行,交叉连接的结果将是1000000行 但是,我假设您希望排列匹配的行。因此,请使用以下方法:
select COALESCE(t1.id, t2.id) as id,
t1.attr1, t1.attr2, t2.attr1, t2.attr2
from Table1 t1
full outer join Table2 t2 on
t2.id = t1.id
full outer join
意味着它还返回未找到匹配项的行。编辑您的问题,并提供示例数据和所需结果。您正在寻找join,我相信?。。您想要两个笛卡尔乘积,还是以某种方式组合值?如何选择从每个表中排列哪些行?几行示例输入和输出数据解决了这种歧义。表1和表2中的t1有什么不同?不是都是表名吗?因此,只有一次需要?@N.Varelat1
和t2
是FROM
子句中定义的别名。您不需要它们,因为您可以将table1.attr1编写为attr1\u 1
等。但是别名减少了消除源表歧义所需的代码。添加COALESCE(t1.id,t2.id)作为id,
将使其完整。
select COALESCE(t1.id, t2.id) as id,
t1.attr1, t1.attr2, t2.attr1, t2.attr2
from Table1 t1
full outer join Table2 t2 on
t2.id = t1.id