Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/11/2011, 17:18
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
Respuesta: División de tablas en mysql

Hay un detalle que tienes que considerar: esta consulta te puede dar resultados erróneos porque en el SQL el orden de los factores si altera el producto. Poner la tabla tablaA, después de tablaB puede dar un mal resultado si la tablaA tiene más registros que tablaB, es decir, si la tablaB depende de la tablaA y no al revés.
Además, en un LEFT JOIN buscar un IS NOT NULL sobre la primera tabla es irrelevante, porque jamás existirán registros NULL en esa respuesta. Sólo tiene sentido usando RIGHT JOIN y no LEFT JOIN, que es su complementario.
La razón de esto es un poco complicada si no conoces algo más que los básico de bases de datos. La idea es que en un LEFT JOIN devuelve todos los registros existentes de la primera tabla, tengan o no correspondencia con la segunda. Como sólo trabaja con registros reales, no existen NULL en la primera tabla, es simplemente imposible. Por eso la condición que pones no es discriminante.
Entonces deberías poner las tablas al revés, como digo, para que la consulta de resultados razonables:
Código MySQL:
Ver original
  1. FROM tablab LEFT JOIN tablaa ON tablaa.codigoProducto=tablab.codigoProducto
  2. WHERE tablab.codigoProducto IS NOT NULL;
Pero esto es sintácticamente igual a poner INNER JOIN, ya que si eliminas los no coincidentes te quedan los coincidentes, y eso es precisamente lo que busca el INNER JOIN, con la ventaja de no tener que indicar nada más:
Código MySQL:
Ver original
  1. FROM tablaa TA INNER JOIN tablab TB ON TA.codigoProducto=TB.codigoProducto;
¿Se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)