Ver Mensaje Individual
  #4 (permalink)  
Antiguo 27/11/2014, 06:07
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 12 años, 6 meses
Puntos: 2656
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)