условие со значениями и без PostgreSQL - PullRequest
0 голосов
/ 07 июня 2018
UPDATE backend."orders"
  SET "statusId" = 5
WHERE "orderId" IN  (10697457,10697458)
  and "statusId" IN (0,1,2,3,4);

UPDATE backend."orders"
   SET "statusId" = 5
WHERE "orderId" IN  (VALUES (10697457),(10697458))
  and "statusId" IN (VALUES (0),(1),(2),(3),(4));

В чем разница между этими двумя запросами?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Обе версии верны, но лучше полагаться на форму списка скаляров IN, чем писать запрос VALUES.Метод скалярной формы метода IN требует меньше записи и часто более эффективен.

0 голосов
/ 07 июня 2018

Два запроса дают одинаковый результат.Разница заключается в удобочитаемости и эффективности.

Как объяснено в документе , за оператором IN должен следовать:

список скалярных выражений в скобках,Результат равен «true», если результат левого выражения равен любому из правых выражений

Используя ключевое слово VALUES, вы все равно создаете список скалярных выражений, поэтомуправильно, но это тяжелее, и документация (см. конец страницы) не рекомендует это:

Совет: Для простых тестов IN лучше полагаться наФорма списка скаляров IN, чем писать запрос VALUES, как показано выше.Метод списка скаляров требует меньше записи и часто более эффективен.

Это может повлиять на производительность (как предполагает цитата), поскольку создание списка скаляров может отличаться в памяти прии без ЗНАЧЕНИЙ, но я не знаю, кто-то должен подтвердить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...