Open jtcaraball opened 4 months ago
no logro entender cual es la consulta que estás haciendo, puedes escribirla en SQL?
Claro que si:
SELECT *
FROM (R FULL OUTER JOIN S ON R.a == S.x AND R.b == S.y) AS FOJ,
(S LEFT OUTER JOIN T ON S.x == T.u) AS LOJ,
T
WHERE FOJ.a == LOJ.x AND LOJ.x == T.u;
Yo estoy ingresando las relaciones y outer joins al CartesianProductPlan
en orden Tables
> Outer Joins
por lo que me queda el "plan" que se ve arriba en la foto.
Un join no tiene sentido si la lista de condiciones que aplican a las tablas que se unen es vacía, así que en tu caso en vez de armar un join entre T y FOJ, debería ser un producto cruz.
Aunque más correcto sería que en BuildJoins
se elija un orden de joins que evite productos cruz.
Para el laboratorio pueden hacerlo como prefieran, no tiene por que ser eficiente mientras este correcto.
Perfecto. Mil gracias :)
Hola de nuevo, perdón por molestar. Estuve jugando en el branch T5 del repo y es un bug en la aplicación. Aquí hay un ejemplo mínimo replicable.
En efecto en BuildJoins
se recorren de izquierda a derecha las relaciones y no se ordenan para evitar productos cruz o genera un producto cruz en vez de un join si el orden original generaría un join sin clausulas. Voy a ver si consigo arreglarlo para abrir un PR.
de hecho hay un bug en una consulta más simple:
SELECT *
FROM S
WHERE S.x == S.y
ya que las condiciones como S.x == S.y
no están soportadas por ahora. Pueden asumir que en los tests no aparecerán filtros como ese
Chuta verdad! Aunque creo que cometí un error. El query que mostre en la imagen anterior no era el que corri, la siguiente query es la que causo el error de arriba:
SELECT *
FROM R, S, T
WHERE S.x == T.u AND R.a == T.u
Tienes razón, hay un bug cuando se intenta hacer joins sin condiciones. El último commit debería arreglarlo: af9e128. Esto se debe a que en una version anterior (no publicada) el build joins armaba joins binarios donde se evitaban los productos cruz. Luego lo cambié pensando en que podría haber una tarea de reordenamiento de joins a futuro.
Muchas gracias!
Hola! Dada la forma en la que que se genera el plan de joins creo que pueden ocurrir cosas raras cómo la siguiente (perdón por la calidad de la foto):
No se si es materia del laboratorio que reorganicemos el plan de forma tal que si se pueda filtrar correctamente.
Muchas gracias por todo el apoyo!