2012-02-04 24 views
21

Vi una consulta ejecutarse en un archivo de registro en una aplicación. y contenía una consulta como:¿por qué usar WHERE 1 = 0 instrucción en SQL?

SELECT ID FROM CUST_ATTR49 WHERE 1=0 

¿Cuál es el uso de dicha consulta que no devuelve nada?

+2

lo más probable es que sea un truco para evitar alguna "característica" de ORM. –

+0

¿Dónde encontraste esa consulta? –

+0

Duplicado: http://stackoverflow.com/questions/517107/why-would-a-sql-query-have-where-1-1 – Krumelur

Respuesta

48

Una consulta como esta se puede utilizar para hacer ping a la base de datos. La cláusula:

WHERE 1=0 

Asegura que no se envían datos hacia atrás, así que no hay carga de la CPU, no hay tráfico de red u otro consumo de recursos.

Una consulta como la que puede probar para:

  • disponibilidad del servidor
  • CUST_ATTR49 existencia mesa
  • ID existencia columna
  • Mantener una conexión viva
  • Causa un gatillo para disparar sin cambiar ninguno filas
  • administrar muchas condiciones O en consultas dinámicas (por ejemplo, WHERE 1=0 OR <condition>)
+0

wow! ¡Perfecto! Gracias – MozenRath

+1

* mantener una conexión viva –

+0

¡Claro! Editado Gracias. –

10

Un caso de uso que puedo pensar: tiene un formulario de filtro en el que no desea tener ningún resultado de búsqueda. Si especifica algún filtro, se agregan a la cláusula where.

O se usa generalmente si tiene que crear una consulta sql a mano. P.ej. usted no desea comprobar si la cláusula donde está vacía o not..and que sólo puede añadir cosas como esta:

where := "WHERE 0=1" 

if X then where := where + " OR ... " 
if Y then where := where + " OR ... " 

(si se conecta con las cláusulas o necesita 0 = 1, si tiene Y tiene 1 = 1)

+0

¿cómo exactamente? ¿Puede dar un ejemplo? – MozenRath

+0

ohhk. Lo entiendo, para 1 = 1 usa AND y para 1 = 0 usa OR. ¡Bonito! Gracias – MozenRath

-2

Parece que alguien está intentando hackear su base de datos. Parece que alguien intentó la inyección de mysql. Puede leer más sobre esto aquí: Mysql Injection

2

cita de Greg

Si la lista de condiciones no se conoce en tiempo de compilación y es en cambio construida en tiempo de ejecución, usted no tiene que preocuparse si tiene una o más de una condición. Puede generar a todos les gusta:

y

y concatenar a todos juntos. Con el 1 = 1 al inicio, el inicial y tiene algo para asociar.

Nunca he visto esto usado para ningún tipo de protección de inyección, ya que dice que no parece que ayudaría mucho. Lo he visto como una conveniencia de implementación . El motor de consulta SQL terminará ignorando el 1 = 1, por lo que no debería tener ningún impacto en el rendimiento.

Why would someone use WHERE 1=1 AND <conditions> in a SQL clause?

+0

Lo leí pero no creo que O se usaría en caso de 1 = 0 hasta que obtuve las respuestas para esta pregunta – MozenRath

7

Este puede ser también utilizados para extraer el esquema de tabla de una tabla sin necesidad de extraer los datos dentro de esa tabla. Como dijo Andrea Colleoni, esos serán los otros beneficios de usar esto.

1

Algunos sistemas usan scripts y pueden establecer dinámicamente los registros seleccionados para que se oculten de una lista completa; por lo que una condición falsa debe pasar al SQL. Por ejemplo, tres registros de 500 pueden marcarse como Privacidad por razones médicas y no deben ser visibles para todos. Una consulta dinámica controlará que los 500 registros sean visibles para los que están en Recursos Humanos, mientras que los 497 son visibles para los administradores. Se pasará un valor a la cláusula de SQL que se establece condicionalmente, es decir, 'DONDE 1 = 1' o 'DONDE 1 = 0', dependiendo de quién esté conectado al sistema.

1

Si el usuario intenta solo anexar registros, entonces el método más rápido es abrir el conjunto de registros sin devolver ningún registro existente.

Cuestiones relacionadas