Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/10/2011, 19:14
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: Devolver null si no hay resultados

Partamos de algunas aclaraciones que he repetido hasta el cansancio en este foro:
- NULL no es un dato, es un estado de indeterminación o un puntero a la nada. COmo no es un dato, no se puede utilizar operadores lógicos ni matemáticos con él, ya que no existe dato con el que hacerlos funcionar. Esto significa que no puedes hacer algo como X = NULL. Simplemente no funciona.
- Con NULL lo que se usan son funciones u operadores que puedan determinar si el valor de una relación dada es NULL, o si el estado de una columna o una operación es NULL. Por eso se usan IFNULL() e IS NULL o IS NOT NULL.
- En el contexto de una consulta entre dos tablas, para determinar si existe una relación real entre dos registros (uno de cada tabla) se usa INNER JOIN, porque devolverá sólo los registros donde haya una coincidencia de condiciones. Pero no devolverá ninguno donde uno de ambos campos sea NULL
- Para determinar si existen NULL en un JOIN se usan o LEFT JOIN o RIGHT JOIN, como te dice jurena. La condición necesaria para esto es que la primera tabla (la de la izquierda) debe ser la tabla que contenga todos los valores a analizar en su relación con la derecha. Si no existe un valor dado en la izquierda, ese valor no saldrá, ni siquiera como NULL, porque no existe nada con qué hacer la comparación.
- Esto significa que la consulta debe realizarse siempre de modo que los NULL aparezcan en la segunda tabla (la de la derecha).

En tu caso, y usando lo que pones en el último post (bastante poca información, por cierto), la idea es bastante parecida a la de jurena:
Código MySQL:
Ver original
  1. SELECT J.*, R1.*
  2.     Jugadores J
  3.     LEFT JOIN Relaciones R1 ON J.id_jugador = R1.id_padre
  4. SELECT J.*, R1.*
  5.     Jugadores J
  6.     LEFT JOIN Relaciones R1 ON J.id_jugador = R1.id_hijo;
El detalle a considerar es que la primera tabla se puede relacionar con la segunda de dos formas: o con un campo (id_padre), o con el otro (id_hijo), por lo que para considerar ambas situaciones es necesario invocar dos LEFT JOIN o realizar un UNION. Asumo que no se puede relacionar con ambos al mismo tiempo (nadie puede ser padre e hijo de si mismo).
El ejemplo que te pongo es el segundo caso.

En cualquier caso, y para lo que sea que lo uses, recuerda que NULL no es un valor, por lo que no puedes realizar operaciones con él, y no puedes "juntarlos" en diferentes registros, porque si intentas devolver una tabla cuyos registros y campos contengan NULL, simplemente el sistema no te devolverá nada... Será una tabla vací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; 17/10/2011 a las 19:28