2012-05-18 9 views
5

Come faccio a selezionare diverse colonne di due tabelle diverse, come ad esempio:select * from due tavoli con diversi # di colonne

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

che sto ricevendo un errore "#1222 - The used SELECT statements have a different number of columns". Da quello che ho capito UNION non funziona,

c'è un modo per ottenere questo risultato, da quando ho avuto bisogno numero disuguale di colonne e righe e non ci sono/voci simili reciproche nelle due tabelle (ad esempio user1 non è elencato in tabella1)?

Questo non può essere fatto in una query?

grazie!

+0

In genere questo sarebbe gestito da due query select separate ... – mellamokb

+0

Non c'è modo di farlo in una query quindi avrei tutte le variabili in una volta? –

+0

È * possibile * ma è molto più semplice effettuare due query, quindi provare un kludge per combinare i risultati in una singola query. Sarà anche molto più difficile leggere correttamente i risultati. – mellamokb

risposta

6

È possibile fake le colonne mancanti utilizzando un alias - per esempio

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

cui nome è in table2, ma non in table1

meno che non sei SINDACATI confuse con UNISCE:

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

questo sarebbe unire le due tabelle, in modo da ottenere tutte le colonne su la stessa riga.

+0

hmm molto interessante –

+1

Questa è la stessa risposta che avrei detto. Tuttavia, sembra ancora molto inutile farlo e meno manutenibile a lungo termine. – mellamokb

+0

cool, se questo è il consenso (che credo sia), allora sono d'accordo che avrei un tempo più facile con query separate. Grazie per l'aiuto! –

5

Se non ci sono voci reciproche o simili nelle due tabelle, queste dovrebbero essere due diverse istruzioni di selezione.

SELECT username, email FROM `table1`; 


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

Qual è la tua motivazione per fare diversamente?

Le voci in table2 sono relative a table1? Un join sarebbe più appropriato?

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

Probabilmente finirò per fare le query separate, poiché non ci sono voci correlate. Mi interessava solo la possibilità. Grazie per l'intuizione! –

3

Nella tabella con meno colonne, provare

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

ecc, al fine di renderli lo stesso numero di colonne.

Problemi correlati