当列是动态的并且存在一个公共列时,如何打印所有列?

时间:2016-12-26 11:21:21

标签: sql postgresql

假设我有2个表A,B。在两个表(id)中都是公共列,而rest列是dynamic.so写一个查询来打印“A”的id并休息所有列。 A(ID,姓名,市),B(ID,电话,PHONE_NUM)。在这里我只知道“id”列,其余列(名称,城市,电话)是动态的,所以我不能使用A.name,A.city,B.phone等。在

select * from A FULL OUTER JOIN B ON A.id = B.id;

两次打印id列。

3 个答案:

答案 0 :(得分:1)

如果您只想显示id列一次,请使用using子句进行连接:

SELECT *
FROM tableA a
   JOIN tableB b using (id)

using子句,作为连接列仅包含select *一次的效果。

答案 1 :(得分:0)

如果我没错,你想要显示两个表和公共列的所有列,即id应该只出现一次。如果是这种情况,请使用下面的查询并用列名替换列名想要展示。

SELECT a.id,a.column1,a.column2,b.column1,b.column2
FROM tableA a
INNER JOIN tableB b ON a.id=b.id

答案 2 :(得分:0)

演示

create table my_table_1 (id int,c1 int,c2 int,c3 int);
create table my_table_2 (id int,c4 int,c5 int);
select      array_to_string(array_agg (table_name || '.' || column_name::text),',')
from        information_schema.columns
where       table_name in ('my_table_1','my_table_2')
        and not (table_name,column_name) = ('my_table_2','id')
  

my_table_1.id,my_table_1.c1,my_table_1.c2,my_table_1.c3,my_table_2.c4,my_table_2.c5