Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как объяснить такой запрос? / 10 сообщений из 10, страница 1 из 1
29.08.2017, 16:00
    #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
29.08.2017, 16:06
    #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
29.08.2017, 16:07
    #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
29.08.2017, 16:22
    #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
29.08.2017, 16:28
    #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
29.08.2017, 16:29
    #39512322
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объяснить такой запрос?
И пишет, что обработано 50 записей

update a set is_active=true and id=10 where id<=50;
-- Query OK, 50 rows affected
...
Рейтинг: 0 / 0
29.08.2017, 16:50
    #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
29.08.2017, 16:53
    #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
29.08.2017, 17:09
    #39512352
MadeOfGlass
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объяснить такой запрос?
Да
...
Рейтинг: 0 / 0
29.08.2017, 17:21
    #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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как объяснить такой запрос? / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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