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 originalSELECT 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 originalAND (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 originalSELECT 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;
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 originalCREATE TABLE `lentesrel` (
`id_lentesrel` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`ID_cil` INT( 20 ) NOT NULL ,
`ID_esf` INT( 20 ) NOT NULL ,
`ID_lente` INT( 20 ) NOT NULL
) ENGINE = INNODB;
Bueno, esta tabla
tambien debe ser parte de la consulta, porque es la tabla que vincula ambas cosas:
Código SQL:
Ver originalSELECT C.cilindro, E.esfera_desde, E.esfera_hasta
FROM cilindro C
INNER JOIN lentesrel L ON C.id_cil = L.id_cil
INNER JOIN esfera E ON C.id_esf = L.id_esf
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;
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.