Tema: Null en join
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/03/2013, 15:46
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: Null en join

Cita:
Mi problema es el siguiente, cuando los datos relacionados no se encuentran en las dos tablas me devuelve null, se encuentra en una pero en otro no pero aun asi me devuelve null enves de los datos de la tabla que si tiene información.
La única forma en que suceda lo que dices es cuando usas LEFT JOIN, que es un caso específico de JOIN, que tiene por objetivo devolver todo lo de la primera tabla (a la izquierda en el FROM), tenga o no coincidencias con la tabla de la derecha, y donde no hay coincidencias, devolver NULL
Esto significa que ese es el comportamiento normal de la consulta, y si tu problema es que no puedes manejar las columnas que contienen NULL, hay dos soluciones:
1) Debes invocar una a una las columnas que consultas, aplicandoles una función que cambie el NULL recibido por otro dato:
Código MySQL:
Ver original
  1. SELECT a, b, c, d, IFNULL(e, '') e, IFNULL(f, '') f, IFNULL(g, '') g
  2. FROM tabla1 T1 LEFT JOIN tabla2 T2 ON T1.a = T2.a
  3. WHERE 1 OR T2.a IS NULL;
En este ejemplo los campos e, f, y g provienen de la segunda tabla.

2) Puedes controlarlo en el programa (off-topic de este foro), porque todos los lenguajes pueden manejar datos NULL, y modificas el valor representado a la hora de mostrarlo en pantalla.

La decisión de usar uno u otro es tuya.

Ahora bien, si sólo quieres que salgan los datos efctivamente relacionados, no se debe usar LEFT JOIN:

Código MySQL:
Ver original
  1. SELECT a, b, c, d, IFNULL(e, '') e, IFNULL(f, '') f, IFNULL(g, '') g
  2. FROM tabla1 T1 INNER JOIN tabla2 T2 ON T1.a = T2.a;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 10/03/2013 a las 18:21 Razón: Error de sintaxis en IFNULL()