Na verdade, eu já vi esse tipo de coisa usada nos relatórios do BIRT. A consulta passada para o tempo de execução do BIRT tem o formato:
select a,b,c from t where a = ?
e a '?' é substituído no tempo de execução por um valor real do parâmetro selecionado em uma caixa suspensa. As opções no menu suspenso são dadas por:
select distinct a from t
union all
select '*' from sysibm.sysdummy1
para que você obtenha todos os valores possíveis mais " *
". Se o usuário selecionar " *
" na caixa suspensa (o que significa que todos os valores de a devem ser selecionados), a consulta deverá ser modificada (por Javascript) antes de ser executada.
Desde o "?" é um parâmetro posicional e DEVE permanecer lá para que outras coisas funcionem, o Javascript modifica a consulta para:
select a,b,c from t where ((a = ?) or (1==1))
Isso basicamente remove o efeito da cláusula where enquanto ainda mantém o parâmetro posicional no lugar.
Também vi o caso AND usado por codificadores preguiçosos ao criar dinamicamente uma consulta SQL.
Digamos que você precise criar dinamicamente uma consulta que comece com select * from t
e verifique:
- o nome é Bob; e
- o salário é> $ 20.000
algumas pessoas adicionariam o primeiro com um WHERE e os subsequentes com um AND assim:
select * from t where name = 'Bob' and salary > 20000
Programadores preguiçosos (e isso não é necessariamente uma característica ruim ) não fazem distinção entre as condições adicionadas, eles começam com select * from t where 1=1
e apenas adicionam cláusulas AND depois disso.
select * from t where 1=1 and name = 'Bob' and salary > 20000