2009-02-05 29 views
7

Estaba pasando por algunas consultas que estoy manteniendo, y un programador me había puesto en las consultas "donde 1 = 1" que siempre parece evaluar a verdadero.¿Por qué una consulta sql tiene "donde 1 = 1"

¿Hay algún beneficio en esto?

duplicado:Why would someone use WHERE 1=1 AND in a SQL clause?

Esa pregunta no es una respuesta a esta pregunta.

cláusula WHERE:

select * from table where 1=1 and sStatus not in ('status1','status2','status3') 

No hay programación o si las declaraciones para empujar una y allí. Una consulta directa.

Si pudiera eliminar esto, me gustaría saber si existe un propósito para que pueda volver a escribir y eliminar el 1 = 1 si no es necesario.

+0

Ningún propósito que pueda ver, y a juzgar por la respuesta aceptada en el enlace, parece que el 1 = 1 se optimizará. Probablemente alguien hizo un poco de programación cut'n'paste. –

Respuesta

16

¿Se trata de consultas dinámicas? Algunas veces es útil cuando se crean consultas dinámicas basadas en parámetros que son opcionales.

1

que he visto dos razones para esto, cuando siempre se desea un resultado verdadero, o cuando no va a ser un número arbitrario de "y la condición = valor" adjunta a la declaración

6

lo uso para cláusulas dynamic where cuando estoy haciendo una programación perezosa y no quiero comprobar siempre si la cláusula está vacía para determinar si ahora necesito un "AND" entre mis cláusulas dinámicas.

4

Esto realmente solo tiene sentido en las consultas dinámicas. Si está agregando parámetros en un bucle en lugar de tener que verificar si hay un DÓNDE ya puede anexar AND Column = Value cada vez.

10

Si construye dinámicamente una cláusula where, puede ser un poco flojo y asumir que cada cláusula que agregue puede ir precedida de "Y", p.

$str="select foo from bar where 1=1"; 

if ($filter1) 
{ 
    $str.=" and col1='frobozz'"; 
} 
0

Eso es muy interesante ... La cláusula WHERE contiene nada más que 1 = 1? Lo he visto con frecuencia en intentos de inyección SQL en los que la cláusula WHERE está configurada en xyz="something" OR 1=1; como medio para devolver siempre una lista de resultados.

¿Puede decirnos más sobre lo que está pasando con esta consulta para que podamos responder mejor a la pregunta?

  • Nicholas
8

Si desea automáticamente añadir restricciones a la consulta, que hace que su vida más fácil:

string sql = "SELECT * FROM table WHERE 1=1"; 

if (someflag) { 
    sql += " AND valid = 1"; 
} 

if (someotherflag) { 
    sql += " AND special = 1"; 
} 

execute(sql); 

Sin WHERE 1 = 1 que se presentan en cada caso para comprobar si es la primera restricción que agregue (y luego use WHERE ...) o si ya agregó alguna otra restricción antes (y luego agregue AND ...).

Cuestiones relacionadas