Какое «значение» имеет эта инструкция SQL в предложении WHERE?
SELECT * FROM cat_precios WHERE 1=1 ORDER BY PRE_ID
Конкретно:WHERE 1=1
Я никогда не видел ничего подобного и понятия не имею, как это работает. Не могли бы вы объяснить мне, что вы там оцениваете?
Как примечание, нет поля с именем 1
В запросе значит если True, то есть лишнее, потому что всегда будет true и это видимо бесполезное условие в таком случае...
Но обычно он используется, когда вы собираетесь создать
WHERE
систему, в которой вы не знаете точных условий, но они складываются на лету, поэтому все остальные добавляемые условия всегда будут иметь значениеAND
.Пример:
У вас есть экран с несколькими вариантами ФИЛЬТРАЦИИ:
и все они являются необязательными, поэтому ваш запрос может быть:
Но вы не знаете, какие у него будут параметры фильтра, это может быть все, ничего или некоторые, поэтому создается общий запрос:
что работает для всех случаев и по опциям добавляются условия:
тогда запрос может быть построен:
оставляя параметры фильтра динамическими, иначе мы не сможем узнать, должно ли условие выполняться
and
или нет, илиwhere
должно ли оно быть включено в запрос.У меня есть идея, что он в основном используется, когда количество условий, которые будут иметь запрос, неизвестно во время компиляции; но они генерируются даже во время выполнения. Когда у вас уже есть
WHERE 1=1
соло, к нему присоединяются другие условия.Это то же самое, что
WHERE = 1
илиWHERE = true
.оператор where используется для фильтрации строк, которые выбираются (которые будут отображаться) из набора данных, когда вы указываете where true, как в этом случае (поскольку 1 = 1 технически дает true), это означает, что нет ограничения и все записи будут отображаться так же, как если бы запрос был:
без где.
Он также используется для построения запросов, в которых 0 или более ограничений будут добавлены к тому, где, поскольку где должно быть хотя бы одно условие.
Альтернативное решение — управлять цепочкой условий. Если он пустой, добавляется WHERE, если он уже что-то содержит, добавляется AND. Затем мы объединяем эту строку с нашим оператором sql. Результат немного чище, чем WHERE 1 = 1, но также требует немного больше работы :-)
dim sWhere as string = String.Empty
Для каждого условия в условиях
Если sWhere = String.Empty, то
sГде = "ГДЕ"
еще
sГде = sГде & "И"
Конец, если
sWhere = sWhere и условие.ToString
следующее условие