Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / where 1=1 / 10 сообщений из 10, страница 1 из 1
10.10.2019, 16:09
    #39874713
it001
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=1
Привет.

Иногда встречаю код типа:


select a
from sametabl
where 1=1
....

Зачем писать 1=1 ?
Поясните пожалуйста.
...
Рейтинг: 0 / 0
10.10.2019, 16:15
    #39874719
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=1
часто используется при макропостроение фразы WHERE
например

Oracle_PL_SQL
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
comm := "SELECT ... FROM .... WHERE 1=1";
if ... then
  comm := comm || ' AND field1=....';
end if;
if ... then
  comm := comm || ' AND field2=....';
end if;
....




иначе нужно как-то хитро определять, когда добавлять 'AND', а когда он не нужен
...
Рейтинг: 0 / 0
10.10.2019, 17:37
    #39874802
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=1
Leonid Kudryavtsevиначе нужно как-то хитро определять, когда добавлять 'AND', а когда он не нужен
нет там ничего хитрого, можно сделать отдельную переменную для where и для первой не добавлять AND
...
Рейтинг: 0 / 0
10.10.2019, 17:53
    #39874821
fte
fte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=1
it001Зачем писать 1=1 ?
Поясните пожалуйста.
Скорее всегоэто способ получить метаданные запроса, т.е. наименование колонок и соответствующие им типы данных,
но правильнее условие 1<>1, тогда запрос вернёт пустой результат, но метаданные Вы всё равно получите.
...
Рейтинг: 0 / 0
10.10.2019, 18:20
    #39874841
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=1
alex-ls,
Вопрос был: зачем так сделано.
А не как ещё можно сделать. Вопрос отвечен.
...
Рейтинг: 0 / 0
11.10.2019, 15:15
    #39875271
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=1
it001,

а еще
для динамически формируемых запросов можно писать и вставлять where-модификаторы в нужное место

Код: plsql
1.
2.
3.
...
  v_sql := Repalce(v_sql,'1=1',v_where_modif) ;
...
...
Рейтинг: 0 / 0
11.10.2019, 16:22
    #39875333
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=1
ZhVit001,

а еще
для динамически формируемых запросов можно писать и вставлять where-модификаторы в нужное место


но тады непонятно нафуя там "1=1", чем он лучше /**MyWHERE**/
( /**MyGROUP**/| /**MyORDER**/.....)

Код: plsql
1.
2.
3.
4.
 v_where:= $wh$WHERE blahblahblah $wh$ ;
...
  v_sql := Repalce(v_sql,'/**v_where**/',v_where_modif) ;
...
...
Рейтинг: 0 / 0
11.10.2019, 16:43
    #39875364
Scott Tiger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=1
it001, миллион лет тому назад Denis Popov учил меня, что так удобнее в отладке сложных запросов добавлять или удалять дополнительные условия. В общем, да, - так удобнее.
...
Рейтинг: 0 / 0
11.10.2019, 17:06
    #39875384
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=1
qwwq,
1) буковок меньше
2) нет риска ошибиться (или вообще задумываться об этом) в регистре - для Replace() MyWHERE <>MYwHERE
3) для "1=1" нет ошибки синтаксического контроля "базового" запроса
Код: plsql
1.
2.
...
  WHERE (1=1) and tbl.colvalue=1234   ; 


а для коммент-константы синтаксический контроль до вставки модификатора выдаст ошибку
Код: plsql
1.
2.
/...
  WHERE /**MyWHERE**/  and tbl.colvalue=1234  ; 



P.S. Вообще-то лучше юзать "(1=1)"
Чтобы внутри модификатора можно было спокойно комбинировать AND и OR
...
Рейтинг: 0 / 0
11.10.2019, 17:22
    #39875402
ZhV
ZhV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where 1=1
Впрочем
каждый сам себе хозяин-барин устанавливать дополнительные правила

А константные коменты могут быть очень полезны если их вставлять в самом начале текста долгоиграющих запросов
Так чтобы можно было легко идентифицировать процессы в pg_stat_activity
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / where 1=1 / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]