2012-05-18 20 views
5

Wie würde ich verschiedene Spalten aus zwei verschiedenen Tabellen, wie wählen:select * from zwei Tabellen mit unterschiedlicher Anzahl der Spalten

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

Ich erhalte einen Fehler "#1222 - The used SELECT statements have a different number of columns". Von dem, was ich verstehe UNION wird nicht funktionieren,

Gibt es eine Möglichkeit, dies zu erreichen, da ich ungleiche Anzahl der Spalten benötigen würde und Zeilen und gibt es keine gegenseitigen/ähnlichen Einträge in den beiden Tabellen (dh user1 ist nicht aufgelistet in Tabelle1)?

Kann dies nicht in einer Abfrage durchgeführt werden?

danke!

+0

Normalerweise würde dies durch zwei separate Select-Abfragen behandelt werden ... – mellamokb

+0

Gibt es keine Möglichkeit, dies in einer Abfrage zu tun, so würde ich alle Variablen auf einmal haben? –

+0

Es ist * möglich, aber es ist viel einfacher, zwei Abfragen zu machen und dann einen Klud, um die Ergebnisse in einer einzigen Abfrage zu kombinieren. Es wird auch viel schwieriger sein, die Ergebnisse richtig zu lesen. – mellamokb

Antwort

6

Sie können die fehlenden Spalten fake eines Pseudonyms gestattet - z.B.

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

wo Namen in table2 ist, aber nicht in table1

Es sei denn, Sie verwirrend GEWERKSCHAFTEN sind mit JOINS:

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

diese beiden Tabellen zusammenführen würde, so dass Sie auf alle Spalten bekommen die gleiche Reihe.

+0

hmm sehr interessant –

+1

Dies ist die gleiche Antwort, die ich gesagt hätte. Es erscheint jedoch immer noch sehr sinnlos, dies zu tun und auf lange Sicht weniger zu warten. – mellamokb

+0

cool, wenn das der Konsens ist (was ich glaube es ist), dann stimme ich zu, ich hätte eine leichtere Zeit mit separaten Abfragen. Danke für Ihre Hilfe! –

5

Wenn in den beiden Tabellen keine gemeinsamen oder ähnlichen Einträge vorhanden sind, sollten dies zwei verschiedene Select-Anweisungen sein.

SELECT username, email FROM `table1`; 


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

Was ist deine Motivation, sonst etwas zu tun?

Sind die Einträge in table2 zu table1? Wäre ein join geeigneter?

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

Ich werde wahrscheinlich die getrennten Abfragen beenden, da es keine verwandten Einträge gibt. Ich war nur an der Möglichkeit interessiert. Danke für deine Einsicht! –

3

mit weniger Spalten in der Tabelle, versuchen

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

etc, um ihnen die gleiche Anzahl von Spalten zu machen.

Verwandte Themen