SQL


15
ago 10

Los dientes del lobo

Oracle demanda a Google por violación de patentes Java en Android. Sólo con esto ya es suficiente para dejar en evidencia a Oracle con respecto a proyectos Open Source. La comunidad Java debe estar que trina. No quiero ni pensar las repercusiones que tendrá esto, bien si sale adelante la demanda o si Oracle no consigue sacarle pasta a Google.

A ver si Oracle consigue matar a Java ya de una vez. :-D ¿Será MySQL el siguiente?


23
oct 08

Diferencias en uniones INNER JOIN en MySQL

Cuidado con utilizar y mezclar las cláusulas INNER JOIN / LEFT JOIN en MySQL con una lista de tablas en el FROM. Por ejemplo, un tipico SELECT:

1
2
3
4
SELECT *
    FROM tabla1 t1, tabla2 t2
    LEFT JOIN tabla3 t3 ON t3.id = t1.id
    WHERE t1.id = t2.id

Funcionaba bien hasta la versión 5.0.12 de MySQL. A partir de la versión 5.0.12, ha cambiado la precedencia de los operadores “coma” (,) y JOIN, de tal forma que se produce un error “Unknown column ‘t1.id’ in ‘on clause’”. Esto rompe de manera definitiva algunos programas, osCommerce por ejemplo.

La solución es poner paréntesis para forzar la precedencia de los operadores “coma” y JOIN, o también cambiar la coma por un INNER JOIN, de tal forma que el anterior query quedaría de la siguiente forma:

1
2
3
4
SELECT *
    FROM tabla1 t1
    INNER JOIN tabla2 t2 ON t2.id = t1.id
    LEFT JOIN tabla3 t3 ON t3.id = t1.id

O también:

1
2
3
4
SELECT *
    FROM (tabla1 t1, tabla2 t2)
    LEFT JOIN tabla3 t3 ON t3.id = t1.id
    WHERE t1.id = t2.id

Personalmente prefiero la primera, considero que es mucho más correcto ya que todas las uniones de las tablas se hacen directamente en cláusulas ON dejando el WHERE libre para las restricciones de los datos, no las uniones.