Digamos que tengo 2 tablas A, B. En ambas tablas (id) es la columna común, y el resto de las columnas dinámicas. Escriba una consulta para imprimir el id de "A" y descanse todas las columnas. A (id, nombre, ciudad), B (id, phone, phone_num). Aquí solo sé la columna "id", las columnas de descanso (nombre, ciudad, teléfono) están llegando dinámicamente, así que no puedo usar A.name, A.city, B.phone, etc.

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

Está imprimiendo la columna de identificación dos veces.

0
Sidhartha 26 dic. 2016 a las 14:21

3 respuestas

La mejor respuesta

Si desea mostrar la columna id solo una vez, use la cláusula using para la unión:

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

La cláusula using como el efecto de que las columnas de unión solo se incluyen una vez con select *.

1
a_horse_with_no_name 26 dic. 2016 a las 11:57

Si no me equivoco, desea mostrar toda la columna de las tablas y la columna común, es decir, la identificación debería aparecer solo una vez. Si ese es el caso, use la consulta a continuación y reemplace el nombre de la columna con los nombres de columna que desea mostrar .

SELECT a.id,a.column1,a.column2,b.column1,b.column2
FROM tableA a
INNER JOIN tableB b ON a.id=b.id
0
Jibin Balachandran 26 dic. 2016 a las 11:26

Demo

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

0
David דודו Markovitz 26 dic. 2016 a las 11:34