¿Cómo se combinan una unión interna y externa en mysql?
-
05-07-2019 - |
Pregunta
Puedo hacerlo en Sybase y puedo hacerlo en Oracle, pero no veo cómo hacerlo en MySQL.
Tengo esto: (por favor, absténgase de reformatear mi sql, la última vez que alguien hizo que lo cambiaron para que no fuera lo mismo e hizo que la pregunta no tuviera sentido)
select table1.id
from
table1
inner join
table2 on (table1.id = table2.id and table2.data='cat'),
table1 t1
left outer join
table3 on (t1.id = table3.id and table3.data = 'dog')
Y obtengo todo tipo de resultados que no tienen sentido.
Quiero obtener una lista de todos los ID de table1 donde table2.data = cat, luego hacer una combinación externa con los resultados de esa tabla 3 donde table3.data = dog.
Observo que no puedo especificar la misma tabla / alias para la tabla1 en las dos cláusulas de combinación, por lo que creo que mysql está ejecutando las expresiones de combinación por separado y ORANDO los resultados juntos o algo así.
También intenté deshacerme de la " unión interna " en la sección from y colocándolo en la cláusula where, eso tampoco funcionó, aunque no funcionó de otra manera (obtuvo resultados erróneos diferentes)
Esto sería muy fácil en sybase u oracle.
¿Qué estoy haciendo mal?
Solución
select table1.id
from
table1
inner join
table2 on (table1.id = table2.id and table2.data='cat')
left outer join
table3 on (table1.id = table3.id and table3.data = 'dog')
Creo que nunca quieres usar una coma en la instrucción from. Creo que la coma es equivalente a decir unión cruzada. Sin embargo, no estoy seguro, pero creo que esta consulta es lo que estás buscando.