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

problema con select y valor null en columna

Estas en el tema de problema con select y valor null en columna en el foro de Mysql en Foros del Web. Hola, estoy teniendo problemas con un select. Tengo una tabla, con un campo que puede ser nulo o tener diversos valores. Lo que quiero es ...
  #1 (permalink)  
Antiguo 14/04/2011, 01:28
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
problema con select y valor null en columna

Hola, estoy teniendo problemas con un select. Tengo una tabla, con un campo que puede ser nulo o tener diversos valores. Lo que quiero es seleccionar aquellas filas que tengan determinado valor y además aquellas cuyo valor sea nulo. Pero no lo consigo, sólo obtengo las que tienen determinado valor, no las de valor nulo. Aquí tenéis la consulta:

select a from table a where a.scheduledTimeDep >=?1 and a.joined not like '%F%'and (a.status.statusCode not in ('OPE','BOR','CAN') or a.status.statusCode is null)

¿Cómo puedo hacer, que además de obtenerme aquellas filas donde statusCode sea diferente de OPE, BOR y CAN tenga valor nulo? Creo que el problema está en la parte "and (a.status.statusCode not in ('OPE','BOR','CAN') or a.status.statusCode is null)", pero no sé como hacerlo.


Muchas gracias, un saludo
  #2 (permalink)  
Antiguo 14/04/2011, 01:35
 
Fecha de Ingreso: agosto-2010
Mensajes: 28
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: problema con select y valor null en columna

Si es además no puede ser un OR tendrá que ser un AND ¿no?
  #3 (permalink)  
Antiguo 14/04/2011, 01:38
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: problema con select y valor null en columna

Hola, tenía entendido que un "or" es para que si se cumple una de las dos cosas me devuelva algo, y que con el "and" se tienen que cumplir las dos cosas. Y yo no quiero que me devuelva sólo los valores donde a.status.statusCode sea null, sino además todos aquellos dónde además de null tenga todos los valores distintos a OPE, BOR y CAN. De todos modos ahora mismo pruebo y te cuento.

Muchas gracias, un saludo
  #4 (permalink)  
Antiguo 14/04/2011, 01:53
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: problema con select y valor null en columna

Hola de nuevo, efectivamente con el and no funciona. Mirando por San Google he visto un comando UNION, lo probaré. Aunque primero voy a ver como sacar sólo los valores donde statusCode es nulo, igual está ahí el problema.

Gracias de todos modos, un saludo
  #5 (permalink)  
Antiguo 14/04/2011, 01:59
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: problema con select y valor null en columna

Pones SELECT a, pero supongo que querrás SELECT *.

Vete poniendo condiciones en el WHERE, una a una, y así verás donde falla. Primero pones:

Código MySQL:
Ver original
  1. where a.status.statusCode is null

Luego

Código MySQL:
Ver original
  1. where a.status.statusCode not in ('OPE','BOR','CAN')
  2. OR a.status.statusCode is null

Y así, y vas viendo si te devuelve lo que te tiene que devolver o no
  #6 (permalink)  
Antiguo 14/04/2011, 02:17
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: problema con select y valor null en columna

Hola, la consulta
select a from table a where a.scheduledTimeDep >=?1 and a.joined not like '%F%' and a.status.statusCode is null
no funciona, no me devuelve ninguna fila y en bbdd estoy viendo que sí las hay. Puede ser que el error esté en "a.status.statusCode is null". a es la tabla, status es un objeto dentro de la tabla, y statusCode un campo dentro del objeto status. Si statusCode está vacio es porque status está vacío. ¿Hay alguna consulta que pregunte por un campo vacío, o un objeto vacio, aparte de is null? Igual ese es el problema.

Agradezco cualquier idea, muchas gracias, un saludo
  #7 (permalink)  
Antiguo 14/04/2011, 03:42
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: problema con select y valor null en columna

Hola, no puede ser un and, porque le estaría diciendo: dame todas aquellas filas donde statusCode sea nulo y además distinto de (OPE,BOR,CAN), y diciéndole eso sólo salen los valores donde es nulo.

Pero no consigo que salga todo en una misma consulta. He probado directamente en la bbdd:

select * from `aodb`.`departureflight` where `aodb`.`departureflight`.joined not like 'F'
and ((`aodb`.`departureflight`.statusCode is null) or (`aodb`.`departureflight`.statusCode not in ('OPE')));
commit;

y funciona, me salen 6 registros.

Pero lo hago en el ServiceImpl:

select a from table a where a.scheduledTimeDep >=?1 and a.joined not like '%F%' and ((a.status is null) or (a.status.statusCode not in ('OPE','BOR','CAN')))

y no funciona, salen sólo 3 registros, los que tienen relleno el campo statusCode. Y si hago las consultas por separado:

select a from table a where a.scheduledTimeDep >=?1 and a.joined not like '%F%' and a.status is null;
select a from table a where a.scheduledTimeDep >=?1 and a.joined not like '%F%' and a.status.statusCode not in ('OPE','BOR','CAN')";

me funcionan, salen 3 registros en cada una. No entiendo el porqué. He intentado usar la partícula union:

select a from table a where a.scheduledTimeDep >=?1 and a.joined not like '%F%' and a.status is null union select a from DepartureFlight a where a.scheduledTimeDep >=?1 and a.joined not like '%F%' and a.status.statusCode not in ('OPE','BOR','CAN') order by a.estimatedTime

pero no funciona, la query no es correcta por lo visto.

Alguien tiene alguna idea? Necesito hacerlo todo en una misma consulta. Muchas gracias
  #8 (permalink)  
Antiguo 15/04/2011, 00:49
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: problema con select y valor null en columna

Hola a todos. Me han comentado que puede ser un tema de persistencia, porque si hago la misma consulta en la bbdd y en mi código (en el ServiceImpl), en la bbdd (el workbench) la hace bien, y en el código sólo me devuelve la mitad de los registros, cómo si sólo hiciera caso de la primera mitad del select, e ignorase el or. Pero no sé qué puedo hacer para remediarlo. ¿Puede alguien echame un cable? Intento hacer un

select ... a.status.statusCode not int ('valor') or a.status is null;


Muchas gracias, un saludo

Etiquetas: columna, null, select
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:02.