2010-05-26 8 views
7

Si tengo dos tablas en MySQL que tiene columnas similares ...En mySQL, ¿es posible SELECCIONAR de dos tablas y combinar las columnas?

TABLEA 
    id 
    name 
    somefield1 

TABLEB 
    id 
    name 
    somefield1 
    somefield2 

¿Cómo estructurar una instrucción SELECT de modo que pueden elegir entre dos mesas a la vez, y tienen los conjuntos de resultados se fusionaron para las columnas que ¿son lo mismo?

Así, por ejemplo, estoy esperando para hacer algo así ...

SELECT name, somefield1 FROM TABLEA, TABLEB WHERE name="mooseburgers"; 

... y tienen el nombre y columnas somefield1 de ambas tablas se fusionaron juntos en el conjunto de resultados.

¡Gracias por su ayuda! salida

Muestra anexa debido pregunta clara:

Quiero las filas de tabla1 y tabla2 desde las filas del conjunto de resultados adjuntas. Por ejemplo, si las tablas contienen

TABLEA 
id(1) name(zoot) somefield(suit) 

TABLEB 
id(1) name(zoot) somefield(flute) 

The resultet would look like: 

name  |  somefield1 
zoot   suit 
zoot   flute 
+0

¿Qué quiere decir con "fusión"? Por favor proporcione un resultado de muestra. – RedFilter

Respuesta

7

Puede combinar columnas de ambas tablas usando (id, nombre) como criterio de unión con:

select 
    a.id        as id, 
    a.name        as name, 
    a.somefield1 || ' ' || b.somefied1 as somefield1 
from tablea a, tableb b 
where a.id = b.id 
    and a.name = b.name 
    and b.name = 'mooseburgers'; 

Si desea unirse sólo en el (id) y combinar las columnas de nombre y somefield1:

select 
    a.id        as id, 
    a.name || ' ' || b.name   as name, 
    a.somefield1 || ' ' || b.somefied1 as somefield1 
from tablea a, tableb b 
where a.id = b.id 
    and b.name = 'mooseburgers'; 

Aunque tengo que admitir que esta es una forma poco habitual de hacer las cosas. Asumo que usted tiene sus razones sin embargo :-)

Si he entendido bien su pregunta y lo que desea es una unión más convencional de las dos tablas, usar algo como:

select id, name, somefield1, '' as somefield2 from tablea where name = 'mooseburgers' 
union all 
select id, name, somefield1, somefield2 from tableb where name = 'mooseburgers' 

esto no combine las filas, pero en su lugar solo anexará las filas de las dos consultas. Use union por su cuenta si desea eliminar filas duplicadas pero, si está seguro de que no hay duplicados o no quiere que se eliminen, union all suele ser más eficiente.


Sobre la base de su edición, la consulta real sería:

select name, somefield1 from tablea where name = 'zoot' 
union all 
select name, somefield1 from tableb where name = 'zoot' 

(o union si no desea duplicados donde a.name==b.name=='zoot' y a.somefield1==b.somefield1).

+0

Gracias. Lo siento si mi pregunta no estaba clara. Sí, solo quiero agregar las filas de las dos tablas. Y asegúrese de que la columna somefield1 de Table1 y somefield1 de Table2 aparezca debajo de la columna individual en algún campo 1 en el conjunto de resultados. – Travis

2

No estoy seguro de lo que entendemos por fusión, pero se puede UNION los resultados:

SELECT id, name, somefield1 FROM TABLEA WHERE name="mooseburgers" 
union all 
SELECT id, name, somefield1 FROM TABLEB WHERE name="mooseburgers"; 
0

¿Usted tal vez quiere decir

SELECT tableA.id, tableA.name, tableA.somefield1 
FROM tableA, tableB 
WHERE tableA.name = tableB.name AND tableA.name="mooseburgers" 
0

Dependiendo de lo que signifique por fusión, aquí hay una posible solución.

Select id,name,somefield1 from TableA 
WHERE Name ='mooseburgers' 
UNION 
Select id,name,somefield1 from TableB 
WHERE Name ='mooseburgers' 

Le permitirá mostrar los resultados de ambas tablas con los resultados fusionados en 1 tabla.

Cuestiones relacionadas