Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PostgreSQL中按列组合/合并两个select查询?_Sql_Postgresql - Fatal编程技术网

如何在PostgreSQL中按列组合/合并两个select查询?

如何在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查询,如UNION所示

假设我有

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.Varela
t1
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