2009-06-17 6 views
6

J'ai deux déclarations séparées SELECT qui sont à la fois GROUPE BY'd séparément par exemple:MySQL: Est-il possible de joindre les résultats GROUP-BY'd à deux SELECT?

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

Je serais très REJOINDRE ces deux SELECTs ensemble pour combiner leurs colonnes, telles que:

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; 

Est-ce possible? Je demande parce que MySQL se plaint

Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser à proximité « LEFT JOIN SELECT x comme x2

Si cela est possible, des réflexions sur ce qui ne va pas avec ma syntaxe?

Merci beaucoup!

Répondre

5

Cela fonctionne

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) 
); 

Alternativement,

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

Les deux résultat dans

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

Exactement ce que je voulais - merci ! – DarkSquid

4

Il y a quelques façons que vous pouvez y parvenir:

  1. Best: Joignez-vous aux tables avant le regroupement comme ceci:
     
    SELECT a.x, y, z, n, o 
        FROM a INNER JOIN b ON a.x = b.x 
    GROUP BY a.x, b.x; 
    
  2. Sélectionnez des deux requêtes en tant que sous-requêtes comme ceci:
     
    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

Je pense (2) est ce qu'il cherche. –

+0

+1 en effet, # 2 est exactement ce que je voulais - a accepté la réponse précédente comme c'était le premier ... mais merci beaucoup! – DarkSquid

1

Vous pouvez également utiliser cette requête :
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;

Questions connexes