Какова цель использовать ГДЕ 1=1 в SQL-операторах? [дубликат]

Взгляните на Google vizualisation API, я предполагаю, что это - то, что Google использует на Google Finance. Я взглянул на некоторых другой API диаграммы, но этот свободен и красив.

17
задан Community 23 May 2017 в 10:32
поделиться

6 ответов

Да, это обычно потому, что он начинается как «где 1 = 0», чтобы заставить инструкцию не работать.

Это более наивный способ обернуть его в транзакцию и не фиксировать в конце, чтобы проверить свой запрос. (Это предпочтительный метод).

7
ответ дан 30 November 2019 в 10:46
поделиться

Это также обычная практика, когда люди создают запрос sql программно , просто проще начать с 'where 1 = 1', а затем добавить 'и customer.id =: custId 'в зависимости от того, указан ли идентификатор клиента. Таким образом, вы всегда можете добавить следующую часть запроса, начинающуюся с "и ...".

19
ответ дан 30 November 2019 в 10:46
поделиться

1 = 1 всегда игнорируется всеми rdbms. Нет никакого компромисса при выполнении запроса с WHERE 1 = 1 .

Создание динамических условий WHERE, таких как ORM-фреймворки или другие, очень часто, проще добавить вещественное где условий, потому что вы избегаете проверки добавления И к текущему условию.

stmt += "WHERE 1=1";
if (v != null) {
   stmt += (" AND col = " + v.ToString());
}

Вот как это выглядит без 1 = 1.

var firstCondition = true;
...
if (v != null) {
   if (!firstCondition) {
      stmt += " AND ";
   }
   else {
       stmt += " WHERE ";
       firstCondition = false;
   }
   stmt += "col = " + v.ToString());
}
9
ответ дан 30 November 2019 в 10:46
поделиться

Люди используют его, потому что они по своей природе ленивы при построении динамических SQL-запросов. Если вы начнете с "where 1 = 1" , тогда все ваши дополнительные предложения просто начнутся с "и" , и вам не нужно будет выяснять.

Не то, чтобы это было ничего плохого в том, чтобы быть ленивым по своей природе. Я видел двусвязные списки, в которых «пустой» список состоит из двух контрольных узлов, и вы начинаете обработку с first-> next до last-> prev включительно.

Это фактически удалило весь специальный код обработки для удаления первого и последнего узлов. В этой настройке каждый узел был средним, поскольку вы не могли удалить первый или последний . Два узла были потрачены впустую, но код был проще и (хоть немного) быстрее.

Единственное другое место, где я когда-либо видел конструкцию «1 = 1», - это BIRT. В отчетах часто используются позиционные параметры и они изменяются с помощью Javascript, чтобы разрешить все значения. Таким образом, запрос:

select * from tbl where col = ?

, когда пользователь выбирает «*» для параметра, используемого для col , изменяется на:

select * from tbl where ((col = ?) or (1 = 1))

Это позволяет использовать новый запрос без возиться с деталями позиционного параметра. Еще есть ровно один такой параметр. Любая достойная СУБД (например, DB2 / z) оптимизирует этот запрос, чтобы полностью удалить это предложение перед попыткой построения плана выполнения, так что компромисса нет.

для параметра, используемого для столбца , изменено на:

select * from tbl where ((col = ?) or (1 = 1))

Это позволяет использовать новый запрос без возни с деталями позиционного параметра. Еще есть ровно один такой параметр. Любая достойная СУБД (например, DB2 / z) оптимизирует этот запрос, чтобы полностью удалить это предложение перед попыткой построения плана выполнения, так что компромисса нет.

для параметра, используемого для столбца , изменено на:

select * from tbl where ((col = ?) or (1 = 1))

Это позволяет использовать новый запрос без возни с деталями позиционного параметра. Еще есть ровно один такой параметр. Любая достойная СУБД (например, DB2 / z) оптимизирует этот запрос, чтобы полностью удалить это предложение перед попыткой построения плана выполнения, так что компромисса нет.

11
ответ дан 30 November 2019 в 10:46
поделиться

Использование 1 = 1 на самом деле не очень хорошая идея, так как это может вызвать полное сканирование таблицы само по себе.

См. Это -> T-SQL 1 = 1 Падение производительности

2
ответ дан 30 November 2019 в 10:46
поделиться

Как вы сказали:

, если вы добавляете условия динамически тебе не о чем беспокоиться об удалении начального И это может быть единственная причина, вы правы.

1
ответ дан 30 November 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: