Seleccione entre los valores de las columnas
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
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 OR
ed, 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.)