Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Null en join

Estas en el tema de Null en join en el foro de Mysql en Foros del Web. Hola estuve leyendo un poco y la verdad no logre interpretas demasiado, llevo tiempo programando pero es la primera ves que uso Join en una ...
  #1 (permalink)  
Antiguo 10/03/2013, 15:05
Avatar de Lautaro_eb  
Fecha de Ingreso: mayo-2010
Ubicación: Bariloche, Argentina
Mensajes: 284
Antigüedad: 14 años, 5 meses
Puntos: 24
Null en join

Hola estuve leyendo un poco y la verdad no logre interpretas demasiado, llevo tiempo programando pero es la primera ves que uso Join en una sentencias.
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.
Se puede solucionar ?
__________________
Mi emprendimiento: Software BRC
Youtube: Tutoriales de programación y electrónica.
  #2 (permalink)  
Antiguo 10/03/2013, 15:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
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()

Etiquetas: join, null, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:08.