update - ¿Por qué una consulta sql tiene "donde 1=1"
update sql (7)
Estaba repasando algunas consultas que estoy manteniendo, y un programador me había preguntado "dónde 1 = 1", lo que siempre parece ser cierto.
¿Hay beneficios para esto?
Duplicado: ¿Por qué alguien usaría WHERE 1 = 1 AND en una cláusula SQL?
Esa pregunta no es una respuesta a esta pregunta.
Dónde cláusula:
select * from table where 1=1 and sStatus not in (''status1'',''status2'',''status3'')
No hay programación o declaraciones if para enviar 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.
¿Fueron consultas dinámicas? Algunas veces es útil cuando se crean consultas dinámicas basadas en parámetros que son opcionales.
Eso es muy interesante ... ¿La cláusula WHERE no contiene nada más que 1 = 1? Lo he visto frecuentemente en intentos de inyección SQL en los que la cláusula WHERE se establece en xyz="something" OR 1=1;
como un medio para siempre devolver 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
Esto realmente solo tiene sentido en 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.
He visto dos razones para esto, cuando siempre quiere un resultado verdadero, o cuando va a haber un número arbitrario de "y condición = valor" anexado al enunciado
Si construye dinámicamente una cláusula where, puede ser un poco perezoso y asumir que cada cláusula que agregue puede ir precedida de "Y", por ejemplo
$str="select foo from bar where 1=1";
if ($filter1)
{
$str.=" and col1=''frobozz''";
}
Utilizo esto para las cláusulas dynamic where cuando estoy haciendo alguna 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.
Si desea agregar restricciones automáticamente a su consulta, hace que su vida sea 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
, en cada caso deberá verificar si es la primera restricción que agrega (y luego usar WHERE ...
) o si ya agregó alguna otra restricción antes (y luego agregar AND ...
).