Ver Mensaje Individual
  #4 (permalink)  
Antiguo 10/12/2007, 18:27
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Re: Problemas de consulta tipo LEFT JOIN

En realidad tendrías que hacer una consulta escalonada, donde cada tabla derivada te de losregistros que cumplen con cada segmento y luego unir todo. Por ejemplo:

SELECT T1.coche_id , T1.piloto_id , T1.nombre, T2.patrocinador_id
FROM (SELECT PC.coche_id , PC.piloto_id , P.nombre FROM pilotos as P INNER JOIN pilotos_coches as PC USING (piloto_id) WHERE PC.coche_id = id_coche_a_buscar) as T1
INNER JOIN
(SELECT PT.patrocinador_id , P.piloto_id FROM pilotos as P INNER JOIN patrocinadores_pilotos as PT USING (piloto_id)) as T2 ;

La condicion necesaria para esto es:
1. Cada tabla derivada tiene que tener un alias.

2. Los campos pivote de los INNER JOIN deben estar en ambas derivadas, y en ambas primarias dentro de cada subconsulta. Los campos pivote de las derivadas pueden no ser los mismos que los de las primarias, las primaria se relacionan entre sí y las derivadas entre derivadas.

3. Los campos pivote en el SELECT final deben indicarse si o si de dónde se toman o habrá un error de campo ambiguo.

Notarás que usé la cláusula USING y no la cláusula ON. USING es más rápida que ON en MySQL pero requiere que los nombres de los campos en ambas tablas sean iguales. ON se usa fundamentalmente cuando los nombres de los campos son distintos. Además USING permite indicar un conjunto de campos a igualar en una sola sentencia.
Además es muy util usar los alias en los campos para cortar el código yhacerlo más legible.