powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как объяснить такой запрос?
10 сообщений из 10, страница 1 из 1
Как объяснить такой запрос?
    #39512305
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это корректный запрос?

Нашел такое:

Код: sql
1.
2.
3.
4.
5.
6.
create table a as select id,false as is_active from generate_series(1,100) _(id);
-- Query OK, 100 rows affected
update a set is_active=true and id=10 where id<=50;
-- Query OK, 50 rows affected 
select count(*) from a where is_active;
-- 1
...
Рейтинг: 0 / 0
Как объяснить такой запрос?
    #39512308
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупинset is_active=true and id=10
Код: sql
1.
set is_active=(true and id=10)


Код: sql
1.
true and id=10


Для каких строк это выражение будет true?
...
Рейтинг: 0 / 0
Как объяснить такой запрос?
    #39512310
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijРолг Хупинset is_active=true and id=10
Код: sql
1.
set is_active=(true and id=10)


Код: sql
1.
true and id=10


Для каких строк это выражение будет true?

так вроде не во вхере условие id=10
...
Рейтинг: 0 / 0
Как объяснить такой запрос?
    #39512317
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинMelkijпропущено...

Код: sql
1.
set is_active=(true and id=10)


Код: sql
1.
true and id=10


Для каких строк это выражение будет true?

так вроде не во вхере условие id=10
вот именно. это условие для присвоения полю is_active
...
Рейтинг: 0 / 0
Как объяснить такой запрос?
    #39512319
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan DurakРолг Хупинпропущено...


так вроде не во вхере условие id=10
вот именно. это условие для присвоения полю is_active

В таком случае это не работает?
where id<=50

Т.е. этот запрос:
Код: sql
1.
update a set is_active=true and id=10 where id<=50;



равен этому:
Код: sql
1.
update a set is_active=true where id=10;
...
Рейтинг: 0 / 0
Как объяснить такой запрос?
    #39512322
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И пишет, что обработано 50 записей

update a set is_active=true and id=10 where id<=50;
-- Query OK, 50 rows affected
...
Рейтинг: 0 / 0
Как объяснить такой запрос?
    #39512338
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинТ.е. этот запрос:
Код: sql
1.
update a set is_active=true and id=10 where id<=50;



равен этому:
Код: sql
1.
update a set is_active=true where id=10;


Нет, они ведут различно.
Код: sql
1.
update a set is_active=true where id=10;


Затронет только 1 строку.

Код: sql
1.
update a set is_active=true and id=10 where id<=50;


Затронет 50 строк. Для id = 10 флаг сменится на true независимо от того, что там было раньше, для остальных - на false, даже если у них is_active был true
...
Рейтинг: 0 / 0
Как объяснить такой запрос?
    #39512341
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijРолг ХупинТ.е. этот запрос:
Код: sql
1.
update a set is_active=true and id=10 where id<=50;



равен этому:
Код: sql
1.
update a set is_active=true where id=10;


Нет, они ведут различно.
Код: sql
1.
update a set is_active=true where id=10;


Затронет только 1 строку.

Код: sql
1.
update a set is_active=true and id=10 where id<=50;


Затронет 50 строк. Для id = 10 флаг сменится на true независимо от того, что там было раньше, для остальных - на false, даже если у них is_active был true

Т.е. вот так?

Код: sql
1.
update a set is_active=(true and id=10) where id<=50;
...
Рейтинг: 0 / 0
Как объяснить такой запрос?
    #39512352
Фотография MadeOfGlass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да
...
Рейтинг: 0 / 0
Как объяснить такой запрос?
    #39512361
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MadeOfGlassДа

я подумал, что это похоже на баг в парсере

update a set is_active=true and id=10 where id<=50;

update a set is_active=true where id<=50 and id=10 ;

Но, да, реально обрабатывается 50 записей, проставляет false для 49 и true для одной
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как объяснить такой запрос?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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