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

uso is null, not null, exists, not exists

Estas en el tema de uso is null, not null, exists, not exists en el foro de Mysql en Foros del Web. Hola, tengo un problema al intentar recuperar unos registros de una tabla donde uno de los campos puede ser nulo. Yo tengo la tabla tabla ...
  #1 (permalink)  
Antiguo 29/07/2011, 04:37
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 11 meses
Puntos: 1
uso is null, not null, exists, not exists

Hola, tengo un problema al intentar recuperar unos registros de una tabla donde uno de los campos puede ser nulo.

Yo tengo la tabla tabla "tabla1", que está asociada a otras tablas, por ejemplo, su campo "statusCode" proviene de la tabla "status" del campo "statusCode". Yo quiero obtener todos los registros de la tabla "tabla1" donde el valor del campo statusCode sea igual a SCH o tenga valor nulo. Supongamos que los estados posibles son e1,e2,SCH. Si yo hago la consulta:

Cita:
select a tabla1 a where a.status.statusCode not int ('%e1%', '%e2%');
sólamente me devuelve los registros donde el valor del estado es SCH, pero si yo tengo algún registro dónde el estado está vacío (es decir a null), no me lo devuelve. Y ahí está el problema, no encuentro la manera de que me devuelva tb los registros donde el estado sea nulo.

He visto por internet la manera de utilizar las cláusulas exists y not exists, que se diferencian de in y not in en que traen esos valores nulos, pero no encuentro la manera de utilizarlas por que por lo que veo se utilizan para subconsultas dentro de una consulta principal.

Debería ser algo parecido a:

Cita:
select a tabla1 a where a.status.statusCode like '%SCH%' and not exists(select b from status b where a.status.statusCode = b.statusCode)
pero no me termina de cuadrar, ¿puede alguien echarme un cable?

Muchas gracias
  #2 (permalink)  
Antiguo 29/07/2011, 05:20
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: uso is null, not null, exists, not exists

Cita:
Yo quiero obtener todos los registros de la tabla "tabla1" donde el valor del campo statusCode sea igual a SCH o tenga valor nulo. Supongamos que los estados posibles son e1,e2,SCH.
Por lo pronto, para responder lo que pides en la primera oración, el que existan los valores "e1" y "e2" es completamente irrelevante, porque no es eso lo que estás buscando. Lo que quieres tiene sólo dos condiciones: Ser igual a "SCH" o ser nulo.
Incluso, ni siquiera necesitas usar LIKE, porque estás pidiendo por una igualdad, y no por una aproximación.
La consulta debería ser así:
Código MySQL:
Ver original
  1. FROM tabla1 a
  2. WHERE a.statusCode = 'SCH' OR a.statusCode IS NULL;

IN y NOT IN no es que traigan valores nulos. Lo que hacen es traer todo lo que no coincida con las condiciones que se ponen, pero no necesariamente nulos. Bien pueden traer vacíos (vacío y NULL son cosas diferentes), y eso no es lo que pides.
La efectividad de esas cláusulas dependerá, entonces, de lo precisas que sean las condiciones pedidas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campos, exists, null, registros, select, 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 17:14.