2011-07-08 20 views
6

Quiero combinar tres tablas entre sí, como se muestra aquí:MySQL: fusionar tres mesas

merge three tables T1, T2 and T3 together

Básicamente quiero incluir los artículos de las tres tablas T1, T2 y T3 y hacer que se fusionaron como se muestra en la tabla de resultados. Intenté algo como esto:

SELECT T1.user, T2.tid, T2.name, T3.type, T1.mid 
FROM T1 
LEFT JOIN T2 ON T1.mid = T2.mid 
LEFT JOIN T3 ON T2.tid = T3.tid 
GROUP BY T1.user; 

Pero parece que no funcionó. Muestra los resultados, pero solo valores únicos. En el resultado si es userjohny, sólo se mostrará el primer valor y pasar por alto el segundo, a pesar de que debería estar en la tabla de resultados.

¿Hay algo que me falta?

+0

cambiado de etiqueta para '' join' desde Merge-table' no está claro. –

+0

@Michael tenías razón. Gracias, está bien. ¿Sabes cómo puedo ordenar a los usuarios? Supongo que tengo que usar ORDER BY aquí. – Johnydep

+0

Orger POR ASC usuario/DESC – infinity

Respuesta

3

El Grupo no es necesario si desea ver todos los resultados para cada uno de los usuarios. De lo contrario, ocultará algunas de las filas y mostrará solo una por usuario.

En primer lugar se unen T1 a T2 derecho de combinación izquierda a T3. Esta es una buena práctica si hay un elemento de T1 que no tiene conexión con el elemento de T3 para evitar que se muestre el resultado NULO para los campos T £.

SELECT T1.user, T2.tid, T2.name, T3.type, T1.mid 
FROM T1 
RIGHT JOIN T2 ON T1.mid = T2.mid 
LEFT JOIN T3 ON T2.tid = T3.tid; 
+0

gracias por su respuesta y explicación. – Johnydep

+0

Sí RIGHT JOIN es mejor. Como tenía este problema y estaba usando WHERE con T2.tid! = 'NULL' además de la consulta anterior. Gracias de nuevo. – Johnydep

4

Solucionar el GROUP BY. No es necesario en esta consulta.

SELECT T1.user, T2.tid, T2.name, T3.type, T1.mid 
FROM T1 
LEFT JOIN T2 ON T1.mid = T2.mid 
LEFT JOIN T3 ON T2.tid = T3.tid; 
+0

gracias, sí que era exactamente el problema, su trabajo ahora. – Johnydep

5

Deshágase de la pieza "Agrupar por". Esto debería solucionar tu problema.

+0

muchas gracias, este fue el problema. Su funcionamiento muy bien ahora – Johnydep

+0

1 sólo para compensar la unidad por los votantes hacia abajo. –