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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top