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

excluir resultados en una consulta

Estas en el tema de excluir resultados en una consulta en el foro de Mysql en Foros del Web. hola, estoy batallando por ahí con otro tema, pero me gustaría avanzar mientras en otro frente para avanzar más rápido. intento hacer una consulta pero ...
  #1 (permalink)  
Antiguo 27/11/2014, 03:49
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 4 años, 8 meses
Puntos: 0
Pregunta excluir resultados en una consulta

hola, estoy batallando por ahí con otro tema, pero me gustaría avanzar mientras en otro frente para avanzar más rápido.

intento hacer una consulta pero necesito eliminar de la salida ciertos resultados a los que no encuentro una manera de hacerlo, me explico

la consulta que tengo es esta



Código MySQL:
Ver original
  1. select cilindro, esfera from cilindro, esfera where esfera
  2.  between  '-6.00' and '+4.00' and
  3.  cilindro >= '-2.00'
  4.  and cilindro+esfera between '-6.00' and '+2.00'
  5.  order by esfera desc;

esto me da la salida correcta por el lado positivo de la tabla pero no por el negativo, cómo podría limitar o eliminar los indeseados?
  #2 (permalink)  
Antiguo 27/11/2014, 05:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.318
Antigüedad: 11 años, 8 meses
Puntos: 2653
Respuesta: excluir resultados en una consulta

¿El campo "esfera" es un DECIMAL o FLOAT?.
Si es VARCHAR es un error y los resultados pueden ser impredecibles.
En todo caso corresponde que no los pongas entre apóstrofos pòrque no son cadenas de texto, y además los valores positivos no llevan signo.
Para evaluar "esfera" como rango debería ser:
Código SQL:
Ver original
  1. SELECT cilindro, esfera
  2. FROM cilindro, esfera
  3. WHERE esfera BETWEEN  -6.00 AND 4.00
  4.     AND cilindro >= -2.00
  5.     AND (cilindro+esfera) BETWEEN -6.00 AND 2.00
  6.  ORDER BY esfera DESC;
Por otro lado, la query que estás haciendo es un JOIN implícito, pero no estás poniendo cuál es la condición de relación, por lo que o bien genera un producto cartesiano, o bien está haciendo JOIN por el nombre de uno o mas campos, lo que podría generar datos basura si los campos de relacion no tienen el mismo nombre en las dos tablas para el mismo dominio.
__________________
¿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 27/11/2014, 05:06
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 4 años, 8 meses
Puntos: 0
Respuesta: excluir resultados en una consulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿El campo "esfera" es un DECIMAL o FLOAT?.
Si es VARCHAR es un error y los resultados pueden ser impredecibles.
En todo caso corresponde que no los pongas entre apóstrofos pòrque no son cadenas de texto, y además los valores positivos no llevan signo.
Para evaluar "esfera" como rango debería ser:
Código SQL:
Ver original
  1. SELECT cilindro, esfera
  2. FROM cilindro, esfera
  3. WHERE esfera BETWEEN  -6.00 AND 4.00
  4.     AND cilindro >= -2.00
  5.     AND (cilindro+esfera) BETWEEN -6.00 AND 2.00
  6.  ORDER BY esfera DESC;
Por otro lado, la query que estás haciendo es un JOIN implícito, pero no estás poniendo cuál es la condición de relación, por lo que o bien genera un producto cartesiano, o bien está haciendo JOIN por el nombre de uno o mas campos, lo que podría generar datos basura si los campos de relacion no tienen el mismo nombre en las dos tablas para el mismo dominio.
los campos esfera y cilindro son decimales (5,2) lo he hecho así para que los tome como números decimales porque creo que me será más cómodo posteriormente.

el caso es que al evaluar debo tener en cuenta los dos la esfera y el cilindro y no se como relacionar eso.

sobre el JOIN y la condicion de la relacion, decirte que quizás sea demasiado para mi.
  #4 (permalink)  
Antiguo 27/11/2014, 06:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.318
Antigüedad: 11 años, 8 meses
Puntos: 2653
Respuesta: excluir resultados en una consulta

El problema es que has definido mal la tabla en cuanto al valor de "esfera". Si ese valor en un lente se expresa como rango, entonces cada instancia de la tabla respectiva debe contener los máximos y mínmos que corresponden a ese único rango.
¿Se entiende?
En ese contexto, y con lso valroes correctos, la query se expresaría así:
Código SQL:
Ver original
  1. SELECT cilindro, esfera_desde, esfera_hasta
  2. FROM cilindro, esfera
  3. WHERE esfera_desde >= -6.00 AND esfera_hasta <= 4.00
  4.     AND cilindro >= -2.00
  5.  ORDER BY esfera DESC;
Lo que a mi me presenta dudas es lo que correspondería a esto:
Código SQL:
Ver original
  1. AND (cilindro+esfera) BETWEEN -6.00 AND 2.00
porque yo no tengo ni idea de optica, y no sé a qué refiere. Por eso no estoy seguro de qué calculo corresponed, pero supondría que es algo así:
Código SQL:
Ver original
  1. SELECT cilindro, esfera_desde, esfera_hasta
  2. FROM cilindro, esfera
  3. WHERE esfera_desde >= -6.00 AND esfera_hasta <= 4.00
  4.     AND cilindro >= -2.00
  5.     AND (cilindro+esfera_desde) BETWEEN -6.00 AND 2.00
  6.     AND (cilindro+esfera_hasta) BETWEEN -6.00 AND 2.00
  7.  ORDER BY esfera_desde, esfera_hasta DESC;
Cita:
sobre el JOIN y la condicion de la relacion, decirte que quizás sea demasiado para mi.
Lamento decirte que debes entenderlo si quieres crear una base de datos. Es fundamental, en especial en etos casos, ya que de lo contrario lo único que tendrás es una colección de datos basura.

A lo que me refiero es que tu armaste esto, según comentaste en otro thread previo:

Sobre ese tema, @solmedina87 ya te dijo que debías hacer una tabla relacional, la cual definiste según tu de este modo:
Código SQL:
Ver original
  1. CREATE TABLE  `lentesrel` (
  2.  `id_lentesrel` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3.  `ID_cil` INT( 20 ) NOT NULL ,
  4.  `ID_esf` INT( 20 ) NOT NULL ,
  5.  `ID_lente` INT( 20 ) NOT NULL
  6. ) ENGINE = INNODB;
Bueno, esta tabla tambien debe ser parte de la consulta, porque es la tabla que vincula ambas cosas:

Código SQL:
Ver original
  1. SELECT C.cilindro, E.esfera_desde, E.esfera_hasta
  2. FROM cilindro C
  3. INNER JOIN lentesrel L ON C.id_cil = L.id_cil
  4. INNER JOIN esfera E ON C.id_esf = L.id_esf
  5. WHERE esfera_desde >= -6.00 AND esfera_hasta <= 4.00
  6.     AND cilindro >= -2.00
  7.     AND (cilindro+esfera_desde) BETWEEN -6.00 AND 2.00
  8.     AND (cilindro+esfera_hasta) BETWEEN -6.00 AND 2.00
  9.  ORDER BY esfera_desde, esfera_hasta DESC;
Sin eso la relacion no existe y se produce un producto cartesiano.

Lamento también tener que decirte que el rubro de Bases de Datos es MUY técnico, inevitablemente técnico. No hay modo de simplificar nada sin caer en errores de toda clase, por lo que es poco amigable para los principiantes y autodidactas...
Deesde ya, vas a tener que tener paciencia. En BBDD no hay muchos atajos, como en programación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/11/2014, 07:47
 
Fecha de Ingreso: noviembre-2014
Mensajes: 76
Antigüedad: 4 años, 8 meses
Puntos: 0
Respuesta: excluir resultados en una consulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
El problema es que has definido mal la tabla en cuanto al valor de "esfera". Si ese valor en un lente se expresa como rango, entonces cada instancia de la tabla respectiva debe contener los máximos y mínmos que corresponden a ese único rango.
¿Se entiende?
En ese contexto, y con lso valroes correctos, la query se expresaría así:
Código SQL:
Ver original
SELECT cilindro, esfera_desde, esfera_hasta
FROM cilindro, esfera
WHERE esfera_desde >= -6.00 AND esfera_hasta <= 4.00
AND cilindro >= -2.00
ORDER BY esfera DESC;

Lo que a mi me presenta dudas es lo que correspondería a esto:
Código SQL:
Ver original
AND (cilindro+esfera) BETWEEN -6.00 AND 2.00

porque yo no tengo ni idea de optica, y no sé a qué refiere. Por eso no estoy seguro de qué calculo corresponed, pero supondría que es algo así:
Código SQL:
Ver original
SELECT cilindro, esfera_desde, esfera_hasta
FROM cilindro, esfera
WHERE esfera_desde >= -6.00 AND esfera_hasta <= 4.00
AND cilindro >= -2.00
AND (cilindro+esfera_desde) BETWEEN -6.00 AND 2.00
AND (cilindro+esfera_hasta) BETWEEN -6.00 AND 2.00
ORDER BY esfera_desde, esfera_hasta DESC;
pues no se si está mal definida o no, si lo está todo será defirnirla de nuevo, para que entiendas el rango del lente, se me ha ocurrido algo

esta primera foto muestra el rango de graduaciones del lente 1.49hc

tenemos lentes de todas las graduaciones con casilla blanca, las sombreadas, son graduaciones que NO tenemos



esta otra es una captura del rango de otro lente, el 1.49hmc, lo mismo que arriba, tenemos los lentes con graduaciones en casilla blanca y las sombreadas, no las tenemos.



Cita:
Iniciado por gnzsoloyo Ver Mensaje
Lamento decirte que debes entenderlo si quieres crear una base de datos. Es fundamental, en especial en etos casos, ya que de lo contrario lo único que tendrás es una colección de datos basura.

A lo que me refiero es que tu armaste esto, según comentaste en otro thread previo:
no lo lamentes , intentaré entenderlo

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Sobre ese tema, @solmedina87 ya te dijo que debías hacer una tabla relacional, la cual definiste según tu de este modo:


Bueno, esta tabla tambien debe ser parte de la consulta, porque es la tabla que vincula ambas cosas:


Sin eso la relacion no existe y se produce un producto cartesiano.

Lamento también tener que decirte que el rubro de Bases de Datos es MUY técnico, inevitablemente técnico. No hay modo de simplificar nada sin caer en errores de toda clase, por lo que es poco amigable para los principiantes y autodidactas...
Deesde ya, vas a tener que tener paciencia. En BBDD no hay muchos atajos, como en programación.
necesito saber como relacionar las tablas para poder hacerlas formar parte de la consulta para que estén relacionadas.

sobre la tecnicidad de las BD, ya lo estoy comprobando, pero .... con un poco de ayuda y algun conocimiento que tengo y que adquiriré con buenos consejos, espero llegar a un resultado satisfactorio.

gracias por la respuesta.

Etiquetas: excluir, resultados, 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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:18.