Pregunta

Estoy tratando de utilizar el medio con nombres de columna en lugar de valores directos, algo como esto:

SELECT * FROM table WHERE column1 BETWEEN column2 AND column3;

Esto se vuelve algo así como 17 filas, pero si escribo:

SELECT * FROM table WHERE (column1 <= column2 AND column1 >= column3) OR (column1 >= column2 AND column1 <= column3)

i moverse por 600 filas .. En ambos casos, solo me dan filas en las que el valor column1 es en realidad el valor medio, pero segundo método me da mucho más resultados, por lo que primero método tiene algo mal con él.

Sospecho que el problema podría estar en el uso cláusula BETWEEN con nombres de columna, en lugar de los valores puros, y de algún modo SQL es la conversión de los nombres de columna a values..its reales extraño, pero puede que alguien me ilumine por favor? Gracias

¿Fue útil?

Solución

SELECT * FROM table WHERE column1 BETWEEN column2 AND column3; # gives 17 rows

es el mismo que

SELECT * FROM table WHERE (column1 >= column2 AND column1 <= column3) # gives 17 rows

Debido a su cheque de adición de

(column1 <= column2 AND column1 >= column3)

que se ORed, se obtiene filas adicionales.

Otros consejos

Between A And B asume que A<B, es decir, que la primera expresión en el Entre, (A), es menor que la segunda expresión, (B) no comprueba o ejecutar con la opción contraria.

.

por ejemplo, si se pone Where 3 Between 4 And 2 no hay filas será devuelto:

o, si se escribe

Select Case When 3 Between 4 and 2 then 'true' else 'false' end

devolverá false

Su lógica de las dos declaraciones no es el mismo:

SELECT * FROM table WHERE (column1 <= column2 AND column1 >= column3) OR (column1 >= column2 AND column1 <= column3)

tiene dos cláusulas. Retire la primera y usted debe tener los mismos resultados que el entre el comunicado.

SELECT * FROM table WHERE (column1 >= column2 AND column1 <= column3)
(column1 <= column2 AND column1 >= column3)

Estas dos condiciones sólo dió TRUE si se ordenan los tres valores como sigue:

column3 <= column1 <= column2

Es decir, la condición es equivalente a:

column1 BETWEEN column3 AND column2

Asimismo,

(column1 >= column2 AND column1 <= column3)

implica este orden:

column2 <= column1 <= column3

Esto es, la condición es equivalente a su primera cláusula WHERE, es decir:.

column1 BETWEEN column2 AND column3

En ambos casos, column1 es el valor medio de todos los resultados de la consulta, como ya se ha dado cuenta.

Y las dos consultas hacen dar resultados diferentes porque el primero tiene una cláusula de WHERE:

column1 BETWEEN column2 AND column3

mientras que la segunda consulta tiene efectivamente una cláusula WHERE de:

(column1 BETWEEN column2 AND column3) OR (column1 BETWEEN column3 AND column2)

(lo que significa que el orden de los dos operandos derecha del operador BETWEEN .. AND .. es realmente importante.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top