2012-05-18 25 views
5

¿Cómo voy a seleccionar diferentes columnas de dos tablas diferentes, tales como:seleccionar * de dos mesas con diferentes # de columnas

SELECT username, email FROM `table1` 
UNION 
SELECT * FROM `table2` WHERE username = 'user1'; 

que estoy recibiendo un error "#1222 - The used SELECT statements have a different number of columns". Por lo que entiendo Unión no funciona,

¿Hay una manera de lograr esto, ya que necesitaría desigual número de columnas y filas y No hay entradas de inversión/similares en las dos tablas (es decir, usuario1 no es enumerados en la tabla 1)?

¿No se puede hacer esto en una consulta?

gracias!

+0

Normalmente esto sería manejado por dos consultas de selección separadas ... – mellamokb

+0

¿No hay manera de hacer esto en una consulta así que tendría todas las variables a la vez? –

+0

It * is * possible pero es mucho más fácil hacer dos consultas y luego probar kludge para combinar los resultados en una sola consulta. También será mucho más difícil leer los resultados correctamente. – mellamokb

Respuesta

6

Puede fake las columnas que faltan utilizando un alias - por ejemplo,

SELECT username, email, '' as name FROM `table1` 
UNION 
SELECT username, email, name FROM `table2` 
WHERE username = 'user1'; 

donde nombre está en tabla2, pero no en tabla1

A menos que seas SINDICATOS confusos con UNE A:

SELECT table1.*, table2.* FROM 
table1 INNER JOIN table2 
ON table1.username = table2.username 

esto sería fusionar ambas tablas, para que pueda obtener todas las columnas de la misma fila

+0

hmm muy interesante –

+1

Esta es la misma respuesta que hubiera dicho. Sin embargo, todavía parece muy inútil hacer esto y menos sostenible a largo plazo. – mellamokb

+0

genial, si este es el consenso (que creo que es), entonces acepto que sería más fácil con consultas separadas. ¡Gracias por tu ayuda! –

5

Si no hay entradas mutuas o similares en las dos tablas, estas deberían ser dos declaraciones de selección diferentes.

SELECT username, email FROM `table1`; 


SELECT * FROM `table2` WHERE username = 'user1'; 

¿Cuál es su motivación para hacer lo contrario?

¿Están las entradas en table2 relacionadas con table1? ¿Sería un join más apropiado?

SELECT t1.username, t1.email, t2.* 
FROM table1 t1 
    JOIN table2 t2 ON t1.username = t2.username 
WHERE t1.username = 'user1'; 
+0

Probablemente termine haciendo las consultas por separado, ya que no hay entradas relacionadas. Solo estaba interesado en la posibilidad. Gracias por tu visión! –

3

En la tabla con menos columnas, tratar

SELECT *, 0 as col1, 0 as col2, ... 

etc con el fin de hacer que el mismo número de columnas.

Cuestiones relacionadas