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

Devolver null si no hay resultados

Estas en el tema de Devolver null si no hay resultados en el foro de Mysql en Foros del Web. Hola, Estoy haciendo un procedimiento de Mysql y necesito saber si hay registros que tengan a X valor como una clave foránea, y si no ...
  #1 (permalink)  
Antiguo 16/10/2011, 04:55
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 7 meses
Puntos: 10
Devolver null si no hay resultados

Hola,

Estoy haciendo un procedimiento de Mysql y necesito saber si hay registros que tengan a X valor como una clave foránea, y si no los hay ,que me devuelva NULL o algo específico.

Código MySQL:
Ver original
  1. select  r.id_padre  from relaciones r
  2.   inner join jugadores j on j.idjugadores = r.id_hijo
  3.   where idjugadores = id_ganador;

El problema es que si no hay resultados no me devuelve nada, y yo necesito null o algo para comparar y saber que no encontro nada.

Ya he probado con ifnull o nullif, y con algunos cases, y ninguno me devuelve algo si no encontro nada.

Alguien tiene alguna idea como saber si la sentencia no encontro resultados?

PD:Estoy dentro de un procedimiento MYSQL
  #2 (permalink)  
Antiguo 16/10/2011, 07:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Devolver null si no hay resultados

SELECT IFNULL(r.id_padre,'X') dato FROM relaciones r
LEFT JOIN jugadores j on j.idjugadores = r.id_hijo
WHERE j.idjugadores = r.id_ganador;
No sé si te servirá, y tampoco indicas a qué tabla pertenece ese campo id_ganador. Tampoco conocemos la estructura de las tablas y cómo has establecido las relaciones.

Última edición por jurena; 16/10/2011 a las 10:11
  #3 (permalink)  
Antiguo 16/10/2011, 16:30
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Devolver null si no hay resultados

El id_ganador es un número cualquiera, es un id, tiene ese nombre porque la sentencia la saque de un procedimiento.

La tabla relaciones se relaciona con la tabla jugadores, donde un jugador puede ser 'el padre' de otro, yo lo que quiero en el procedimiento, es saber si un jugador tiene padre o no.

El problema es que si pongo la sentencia así como la escribí, o mismo con IFNULL o NULLIF, en el caso de que no hayan registros con esa id, no me devuelve nada, entonces no puedo decir

while (algo = NULL)

Donde algo sería el id que me devuelve la query(en caso de que se encuentren resultados )

Me explico?
  #4 (permalink)  
Antiguo 17/10/2011, 03:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Devolver null si no hay resultados

Ponnos la estructura de las dos tablas y los datos de lo que sería un padre y un hijo, y otro que no tiene padre ni hijo. Con esos datos podremos armarte una consulta que te saque lo que quieres.
  #5 (permalink)  
Antiguo 17/10/2011, 18:57
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Devolver null si no hay resultados

Jugadores;
id_jugador
otros datos

Relaciones;
id_relacion
id_padre
id_hijo

ID_padre se relaciona con id_jugador e id_hijo también
  #6 (permalink)  
Antiguo 17/10/2011, 19:14
Avatar de 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

Etiquetas: devolver, null, registros, resultados, select, sql
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 17:55.