En realidad, he visto este tipo de cosas se utiliza en BIRT informes. La consulta pasada al tiempo de ejecución BIRT es de la siguiente forma:
select a,b,c from t where a = ?
y el '?' se reemplaza en el tiempo de ejecución por un valor de parámetro real seleccionado de un cuadro desplegable.Las opciones en el menú desplegable se dan por:
select distinct a from t
union all
select '*' from sysibm.sysdummy1
para que obtenga todos los valores posibles plus "*
". Si el usuario selecciona "*
" en el cuadro desplegable (lo que significa que deben seleccionarse todos los valores de a), la consulta debe ser modificada (por Javascript) antes de ejecutarse.
Dado que el "?" es un parámetro de posición y debe permanecer allí por otras cosas para trabajar, el Javascript modifica la consulta sea:
select a,b,c from t where ((a = ?) or (1==1))
Que básicamente elimina el efecto de la cláusula where al mismo tiempo dejando el parámetro de posición en su lugar.
También he visto el caso AND utilizado por los codificadores perezosos mientras se crea dinámicamente una consulta SQL.
Digamos que tienes para crear dinámicamente una consulta que se inicia con select * from t
y cheques:
- el nombre es Bob; y
- el salario es> $ 20.000
algunas personas se sumaría el primero con un WHERE y las posteriores con una Y de este modo:
select * from t where name = 'Bob' and salary > 20000
Los programadores perezosos (y eso no es necesariamente una mal rasgo) no distinguiría entre las condiciones agregadas, comenzarían con select * from t where 1=1
y simplemente agregarían cláusulas AND después de eso.
select * from t where 1=1 and name = 'Bob' and salary > 20000
* "¿Por qué alguien utilizar esta construcción para la definición de una visión" * Probablemente por costumbre. No ofrece ninguna ventaja funcional en consultas estáticas. – ADTC