На самом деле, я видел подобные вещи, используемые в отчетах BIRT. Запрос, передаваемый в среду выполнения BIRT, имеет вид:
select a,b,c from t where a = ?
и "?" во время выполнения заменяется фактическим значением параметра, выбранным из раскрывающегося списка. Выбор в раскрывающемся списке:
select distinct a from t
union all
select '*' from sysibm.sysdummy1
, чтобы вы получили все возможные значения плюс "*
". Если пользователь выбирает «*
» из выпадающего списка (то есть все значения a должны быть выбраны), запрос должен быть изменен (с помощью Javascript) перед выполнением.
С "?" является позиционным параметром, и ДОЛЖЕН оставаться там, чтобы другие вещи работали, Javascript изменяет запрос так:
select a,b,c from t where ((a = ?) or (1==1))
Это в основном устраняет эффект предложения where, в то же время оставляя позиционный параметр на месте.
Я также видел случай AND, используемый ленивыми кодировщиками при динамическом создании SQL-запроса.
Допустим, вам нужно динамически создать запрос, который начинается с select * from t
и проверяет:
- зовут Боб; и
- оклад> 20 000 долларов
некоторые люди добавили бы первое с ГДЕ, а последующие с И, таким образом:
select * from t where name = 'Bob' and salary > 20000
Ленивые программисты (и это не обязательно плохая черта) не будут различать добавленные условия, они начнут с select * from t where 1=1
и просто добавят предложения AND после этого.
select * from t where 1=1 and name = 'Bob' and salary > 20000