¿Por qué alguien pondría `where 1 = 1` en una consulta?

18

Encontré una vista en nuestra base de datos hoy donde estaba la primera declaración en la cláusula where where 1 = 1. ¿No debería esto volver cierto para cada registro? ¿Por qué alguien escribiría esto si no está filtrando ningún registro?

goric
fuente
Respondido aquí: dba.stackexchange.com/questions/667/…
Gaius
3
Porque quieren hackear el sitio web de sombodys ;-)
Tim Schmelter

Respuestas:

40

Algunos creadores de consultas dinámicas incluyen esta condición para que cualquier condición "real" se pueda agregar con un ANDsin hacer una verificación como if (first condition) 'WHERE' else 'AND'.

BenV
fuente
Parece extraño que un generador de consultas no pueda determinar si una condición es la primera de una línea, pero creo que también tiene razón.
ern0
3
a menudo es el caso cuando el "generador de consultas" es alguien que escribe código para concatenar en la instrucción SQL a mano. a veces la introducción de una biblioteca de construcción de consultas más formal lo elimina.
araqnid
1
He tenido que lidiar con código "antiguo" como este, y es muy cierto. Cuando esté ensamblando toda la instrucción SQL en una sola cadena, habrá grupos de instrucciones if / then o case que pueden o no activarse. Debido a que nunca se sabe si se toma alguna de esas rutas de código, PERO tiene un AND incrustado en su cláusula WHERE (debido a una cláusula que es consistentemente parte de la cadena), necesita (a) eliminar el AND ofensivo o ( b) simplemente pasarlo como una verdad lógica. Agregar "1 = 1" es más fácil que redactar la cadena correctamente.
Avery Payne
5

Si tiene muchos puntos de creación de sentencias SQL en su programa que generan consultas similares , puede marcar el examinado con este truco. Si la oración se trata de contar, puede usar el código a continuación para que pueda extraerlo 42de un registro SQL.

select count(42) from table
ern0
fuente
4

Proporciona una situación que siempre es cierta, por lo que no afecta los resultados, pero ya sabe que hay un elemento en la cláusula WHERE.

SchwartzE
fuente