2009-06-17 4 views
6

Ich habe zwei separate SELECT-Anweisungen, die sowohl GROUP-BY'd getrennt sind zB:MySQL: Ist es möglich, die GROUP-BY'd Ergebnisse zu zwei SELECTs zu verbinden?

SELECT x, y, z FROM a GROUP BY x 
SELECT x, n, o FROM b GROUP BY x 

Ich würde sehr gerne diese beiden SELECTs miteinander zu verbinden, ihre Spalten zu kombinieren, wie zum Beispiel:

SELECT x as x1, y, z FROM a GROUP BY x 
LEFT JOIN (
    SELECT x as x2, n, o FROM b GROUP BY x) 
ON x1=x2; 

Ist das möglich? Ich frage, weil sich MySQL beschwert

Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in der Bedienungsanleitung für die richtige Syntax verwenden in der Nähe von ‚LEFT JOIN SELECT x als x2

Wenn dies möglich ist, irgendwelche Gedanken auf, was ist los mit meiner Syntax MySQL-Server-Version entspricht?

Vielen Dank!

Antwort

5

Dies funktioniert

select * from (
    (select 1 a,2 b,3 c) t1 left join (select null a,2 b,5 c) t2 on (t1.b=t2.b) 
); 

Alternativ

select * from (
    (select 1 a,2 b,3 c) t1 left join (select null a,2 b,5 c) t2 using (b) 
); 

Beides führt in

+---+---+---+------+---+---+ 
| a | b | c | a | b | c | 
+---+---+---+------+---+---+ 
| 1 | 2 | 3 | NULL | 2 | 5 | 
+---+---+---+------+---+---+ 
1 row in set (0.00 sec) 
+0

Genau was ich wollte - danke ! – DarkSquid

4

Es gibt ein paar Möglichkeiten, wie Sie dies erreichen können:

  1. Best: Verknüpfen Sie die Tabellen VOR wie so Gruppierung:
     
    SELECT a.x, y, z, n, o 
        FROM a INNER JOIN b ON a.x = b.x 
    GROUP BY a.x, b.x; 
    
  2. Wählen Sie aus den beiden Abfragen als Unterabfragen wie so:
     
    SELECT * 
    FROM  (SELECT x, y, z FROM a GROUP BY x) AS a 
    INNER JOIN (SELECT x, n, o FROM b GROUP BY x) AS b 
         ON a.x = b.x; 
    
+0

Ich denke (2) ist was er sucht. –

+0

+1 in der Tat, # 2 ist genau das, was ich wollte - die vorherige Antwort angenommen, wie es zuerst war ... aber vielen Dank! – DarkSquid

1

Sie könnten auch diese Abfrage verwenden :
SELECT a.x, a.y, a.z, b.x, b.o, b.n FROM a, (SELECT x, n, o FROM b GROUP BY x) as b WHERE a.x = b.x GROUP BY a.x;

Verwandte Themen