На самом деле, я видел подобные вещи, используемые в отчетах 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