2009-06-17 11 views
6

Tengo dos sentencias SELECT separadas, que son a la vez GRUPO-BY'd separado por ejemplo:MySQL: ¿Es posible UNIR los resultados GROUP-BY'd a dos SELECT?

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

Me gustaría mucho a unir estos dos SELECTs juntos para combinar sus columnas, tales como:

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; 

¿Esto es posible? Lo pregunto porque MySQL se queja

Tiene un error en su sintaxis SQL; compruebe el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta utilizar cerca de 'LEFT JOIN SELECT x como x2

Si esto es posible, alguna idea de lo que le pasa a mi sintaxis?

Muchas gracias!

Respuesta

5

Esto funciona

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

Alternativamente,

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

Ambos resultan en

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

Exactamente lo que quería - gracias ! – DarkSquid

4

Hay algunas maneras que usted puede lograr esto:

  1. Mejor: Una las tablas antes de agrupar así:
     
    SELECT a.x, y, z, n, o 
        FROM a INNER JOIN b ON a.x = b.x 
    GROUP BY a.x, b.x; 
    
  2. Seleccione una de las dos consultas como sub-consultas, así:
     
    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

Creo que (2) es lo que está buscando. –

+0

+1 de hecho, el # 2 es exactamente lo que quería, acepté la respuesta anterior como lo fue primero ... ¡pero muchas gracias! – DarkSquid

1

También es posible usar esta consulta :
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;

Cuestiones relacionadas