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

evitar valores null dentro de un calculo en una consulta

Estas en el tema de evitar valores null dentro de un calculo en una consulta en el foro de Mysql en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT ( 1 / 0 ) AS resul   FROM DUAL WHERE resul IS NOT NULL ; tengo el ...
  #1 (permalink)  
Antiguo 11/06/2013, 18:15
Avatar de rocha7778  
Fecha de Ingreso: mayo-2013
Ubicación: Cartagena Colombia
Mensajes: 79
Antigüedad: 10 años, 11 meses
Puntos: 1
evitar valores null dentro de un calculo en una consulta

Código SQL:
Ver original
  1. SELECT (1/0) AS resul  FROM DUAL
  2. WHERE resul IS NOT NULL;
tengo el siguiente codigo de ejemplo,
pero me arroja un error:
Cita:
Error Code: 1054
Unknown column 'resul' in 'where clause'
Mi pregunta es la siguiente como puedo evitar mostrar valores null, en una consulta, siendo que estos se proceden de un calculo de otra consulta.

(1/0) realmente son dos consultas una que arroja 1 y otra que por razones de inconsistencia arroja cero.

a todas estas cual seria el orden en que mysql procesa una consulta?

ejemplo:

1. select
2. from
3. where

o

1. from
2.where
3.select

de antemano gracias.

Última edición por gnzsoloyo; 11/06/2013 a las 18:57
  #2 (permalink)  
Antiguo 11/06/2013, 18:58
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, 4 meses
Puntos: 2658
Respuesta: evitar valores null dentro de un calculo en una consulta

Es una regla general de todos los DBMS que no se pueden usar en el WHERE los alias creados en el SELECT de la misma consulta.
Nunca.

Por lo demás, no puedes estar preguntando esto en serio:
Cita:
a todas estas cual seria el orden en que mysql procesa una consulta?

ejemplo:

1. select
2. from
3. where

o

1. from
2.where
3.select
Eso es reconocer que no tienes ni media idea de SQL, más allá de que sea MySQL, SQL Server, Oracle, PostgreSQL, DB2 o Firebird.
Todos, absolutamente todos los DBMS procesan una consulta SELECT de la misma forma, porque sólo hay una forma de escribir la estructura básica definida en el ANSI-SQL.

Una sola.

SELECT ... FROM ... [WHERE...]

Nota: Los corchetes se usan en los manuales para indicar que algo es opcional.

AL menos lee un manual básico.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/06/2013, 20:47
Avatar de rocha7778  
Fecha de Ingreso: mayo-2013
Ubicación: Cartagena Colombia
Mensajes: 79
Antigüedad: 10 años, 11 meses
Puntos: 1
De acuerdo Respuesta: evitar valores null dentro de un calculo en una consulta

Aunque no lo creas, esa era la respuesta que estaba esperando.
  #4 (permalink)  
Antiguo 12/06/2013, 05:59
 
Fecha de Ingreso: junio-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
Respuesta: evitar valores null dentro de un calculo en una consulta

Cita:
Iniciado por rocha7778 Ver Mensaje
Código sql:
Ver original
  1. SELECT (1/0) AS resul  FROM dual
  2. WHERE resul IS NOT NULL;
tengo el siguiente codigo de ejemplo,
pero me arroja un error:


Mi pregunta es la siguiente como puedo evitar mostrar valores null, en una consulta, siendo que estos se proceden de un calculo de otra consulta.

(1/0) realmente son dos consultas una que arroja 1 y otra que por razones de inconsistencia arroja cero.

A todas estas cual seria el orden en que mysql procesa una consulta?

Ejemplo:

1. Select
2. From
3. Where

o

1. From
2.where
3.select

de antemano gracias.
select ifnull(1/0,'')
  #5 (permalink)  
Antiguo 12/06/2013, 06:04
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, 4 meses
Puntos: 2658
Respuesta: evitar valores null dentro de un calculo en una consulta

@kaki: Una división por cero, que es lo que estás poniendo, no devuelve NULL, genera un fallo porque es una operación ilegal.
Al menos eso deberías saberlo de los lenguajes de programación.

¿Nunca estudiaste límites e indeterminaciones en la escuela secundaria?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 12/06/2013, 08:13
 
Fecha de Ingreso: junio-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
Respuesta: evitar valores null dentro de un calculo en una consulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
@kaki: Una división por cero, que es lo que estás poniendo, no devuelve NULL, genera un fallo porque es una operación ilegal.
Al menos eso deberías saberlo de los lenguajes de programación.

¿Nunca estudiaste límites e indeterminaciones en la escuela secundaria?
Yo si lo hice, tal vez los desarrolladores de MySQL no lo hicieron.
Select 1/0 as resultado
No es una cuestión mía de verdad.
Solo intento ayudar a rocha7778 indicandole que existe la función ifnull
Luego el decidirá si la emplea en el select o en el where , en función de sus necesidades.

Creo que esto es un foro donde unos preguntan y otros ,porque así lo deciden, les ayudan.
Si todos supieran todo este foro no existiría.

Gracias de todas formas
  #7 (permalink)  
Antiguo 12/06/2013, 08:41
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, 4 meses
Puntos: 2658
Respuesta: evitar valores null dentro de un calculo en una consulta

Me parece que no has entendido el tema...
Según el manual de referencia de MySQL, una división en las condiciones indicadas genera un error:
Cita:
Error: 1365 SQLSTATE: 22012 (ER_DIVISION_BY_ZERO)

Message: Division by 0
El mismo tipo de error se genera en todos los lenguajes que yo conozco (que son varios), y es producto de lo mismo que en Limites: un resultado así es indeterminable (tiende a infinito).
Además, un detalle: una división que da por resultado 0, tampoco es NULL, porque NULL no es un dato. Es un estado de indeterminación, y por tanto la consulta que él plantea no tiene resultados válidos.
Cita:
Creo que esto es un foro donde unos preguntan y otros ,porque así lo deciden, les ayudan.
Si todos supieran todo este foro no existiría.
La crítica fue sincera, porque ese error existe y genera el colapso de sistemas cuando no se lo identifica.
No fue intención ofender, pero tienes que tener cuidado en no conducir a otros a un error grave.
Todos hemos metido la pata, y todos aprendemos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 12/06/2013, 09:14
 
Fecha de Ingreso: junio-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
Respuesta: evitar valores null dentro de un calculo en una consulta

Gracias por contestar y tratar de que aprendamos.

Pero sigo pensando que es una buena forma de controlar esa situación para el.
Si tiene datos que le pueden producir esos errores también tiene funciones que le pueden ayudar a tratarlos.

funcion ifnull


Yo soy el primero que se equivoca y no tengo problema en reconocerlo.
Yo me he equivocado muchas veces.

Espero que esta información que le proporcionamos al compañero le ayude con su problema.

Un saludo
  #9 (permalink)  
Antiguo 17/06/2013, 14:06
 
Fecha de Ingreso: abril-2011
Mensajes: 66
Antigüedad: 13 años
Puntos: 7
Respuesta: evitar valores null dentro de un calculo en una consulta

@rocha7778: Creo que lo que consultas si se puede realizar, pero creo que lo formulaste de mala manera. Te paso a explicar mas en detalle que es lo que creo que tu quieres lograr.

Como bien dijo gnzsoloyo, una consulta se estructura basicamente en una sola forma: SELECT .... FROM .... [WHERE] ...

Ahora, hay consultas que se realizan sobre otras consultas, consideradas como subconsultas, y de las cuales son tratadas como consultas avanzadas. En este tipo de subconsultas, pueden ir en el lugar que lo desees, siempre y cuando respetes siempre la estructura basica de una consulta SQL. Me explico en mas detalle.

En una consulta, por ejemplo puedes tener:
Código MySQL:
Ver original
  1.  u1.a1,
  2.  (
  3.    SELECT SUM(m1) AS valor_suma
  4.    FROM [nombre_tabla]
  5.    WHERE m5 > 10
  6.  ) as t1,
  7.  u1.a12
  8. (
  9.   SELECT *
  10.   FROM tabla3
  11.   WHERE q4 = 6
  12.   GROUP BY fecha
  13. ) as u1
  14. WHERE u1.valor = 45 AND t1.valor > 8

Si te puedes dar cuenta en esta consulta, nunca deje de respetar la estructura basica de una consulta SQL, ya que si analizas globalmente la consulta, se encuentran todos los componentes que generan una consulta SQL basica que son el SELECT... FROM ... WHERE.... , la gracia este en como utilizas y como estructuras tu consulta.

@gnzsoloyo y @kaki.

Con el permiso de ustedes, me parece que su discusion es correcta, debido a que ambos tienen razon, pero analizando un poco el problema mencionado en un comienzo por usuario rocha7778, pude determinar lo siguiente:
Cita:
... (1/0) realmente son dos consultas una que arroja 1 y otra que por razones de inconsistencia arroja cero....
A lo que menciona el usuario, ese valor propuesto por él es un simple valor de ejemplo, por lo cual si fuera en un sentido literal, gnzsoloyo tiene razon, no se puede realizar una division por cero. Ahora, segun el manual de referencia, esta situacion es una caracteristica de MySQL a la hora de configurar el servidor, en la cual por defecto si realizas esta operacion, el valor del resultado es NULL y no un error, a no ser que tengas activado que te arroje error en caso de dividir por cero. Para mas informacion, poder visitar el siguiente enlace: [URL="http://dev.mysql.com/doc/refman/5.0/es/precision-math-expressions.html"]http://dev.mysql.com/doc/refman/5.0/es/precision-math-expressions.html[/URL]

Por lo tanto, lo que intenta realizar el usuario es completamente factible, si es que lo tiene configurado por defecto.
Y si tomamos el valor como que es una referencia, lo que indica kaki es correcto, pero esto lo tiene que controlar en la consulta en la cual obtiene el valor cero, y colocar un condicional que en caso de ser 0, que lo especifique como NULL, asi el valor resultante en una division de cualquier valor por NULL, su resultado sera NULL.

Saludos a todos.

Última edición por max_mouse699; 17/06/2013 a las 14:10 Razón: perdon, me equivoque en especificar alias a los campos del select
  #10 (permalink)  
Antiguo 17/06/2013, 14:28
 
Fecha de Ingreso: abril-2011
Mensajes: 66
Antigüedad: 13 años
Puntos: 7
Respuesta: evitar valores null dentro de un calculo en una consulta

Al parecer me equivoque

Código MySQL:
Ver original
  1.   u1.a1,
  2.   t1.valor_suma,
  3.   u1.a12
  4.   (
  5.     SELECT *
  6.     FROM tabla3
  7.     WHERE q4 = 6
  8.     GROUP BY fecha
  9.   ) as u1,
  10.   (
  11.      SELECT SUM(m1) AS valor_suma
  12.      FROM [nombre_tabla]
  13.      WHERE m5 > 10
  14.    ) as t1
  15. WHERE u1.valor = 45 AND t1.valor > 8

Sorry.-

Etiquetas: calculo, null, 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 16:15.