2011-12-02 12 views
8

Duplicar posible:
Why would someone use WHERE 1=1 AND <conditions> in a SQL clause?¿Hay alguna vez una razón lógica para usar 1 = 1 en una cláusula where?

estoy trabajando en una base de código que a menudo tiene

where 1=1

A menudo, estas consultas son complejas y difíciles de leer. Por lo tanto, no siempre es factible desglosar la semántica de consultas puramente para un refactor. Mi intuición es que esto siempre es innecesario. Tal vez exista un requisito para una cláusula where similar al requisito de una cláusula Group By cuando se realiza un SELECT con una función agregada junto a una columna al grupo.

¿Alguna vez se necesita esto?

+4

Sí, es muy útil con inyección SQL sitios web propensas;) –

+0

que he visto esta pregunta exacta de lo que una vez o dos veces, puede ser que desee para prestar más atención a la lista de preguntas sugeridas que aparece cuando ingresas el título de tu pregunta. –

+0

donde 1 = 1 es una declaración 100% CORRECTA. Por lo tanto, lo que tenga en la instrucción SELECT se devolverá sin importar si tiene filas o no. –

Respuesta

16

Se hace que la construcción dinámica en la que las cláusulas más fácil ...

WHERE 
    1=1 
    AND condition1 
    AND condition2 

De esta manera usted no tiene que hacer ejercicio si necesita AND o si agrega condiciones. Usted siempre necesita el AND.

1

Creo que tiene algo que ver con poder escribir largas cláusulas WHERE sin tener que pensar en declaraciones espurias AND. En otras palabras, está ahí para hacer que el código se vea mejor. Bastante seguro de que se optimiza. Sin embargo, si hay una o delante, ese es el olor de la inyección de SQL :)

SELECT 
... 
WHERE 1=1 
AND COND 
AND ANOTHERCOND 
AND THIRDCOND 
-- AND COMMENTEDOUT 
AND FIFTHCOND 
+0

Sí, pero si tienes O para la condición "1 = 0" es con lo que empiezas :) –

2

que he visto que hacer para que al construir consultas dinámicas usted no tiene que tiene que saber por dónde empezar la cláusula AND ya que todo fue después WHERE 1=1

2

Su utilidad si agrega dinámicamente restricciones a su SQL De esta forma, nunca tendrá que preocuparse por la palabra clave "DONDE" y puede usar "Y" al comienzo de cada parte donde agrega una restricción. (Si quieres, puedo codificar un pequeño ejemplo que lo explique).

Así que, sí, hay usos legítimos de 1 = 1.

1

La mayoría de los desarrolladores de casos que lo utilizan para la facilidad de comentar que las condiciones

Cuestiones relacionadas