2014-10-31 3 views
0

Есть ли UPDATE IF подобный оператор в SQL, который позволяет мне проверять подмножество атрибутов, предоставленных клиентом, на строку, которая нуждается в обновлении?ОБНОВЛЕНИЕ Условие IF перед совершением

например. UPDATE posts SET body = $body WHERE post_id = $post_id IF author_id = $author_id

FIND, check, и UPDATE завернутый в транзакцию не такой элегантный, как хотелось бы. Также не проверяются поля, предоставленные клиентом, с помощью предложения WHERE.

Добавление атрибутов в предложение WHERE приведет к увеличению количества индексов, которые необходимо создать без каких-либо преимуществ вне проверки.

+0

Я не понимаю. Что вы ожидаете 'IF author_id = $ author_id' делать иначе, чем' WHERE author_id = $ author_id'? –

+0

Обновленный вопрос. – paulkon

+0

Это делает его еще более запутанным. Как вы считаете, что странная функция 'IF' будет быстрее, если индекс отсутствует, чем предложение WHERE? Индексы создаются именно по этой причине: ускоряют поиск данных. Плюс: у вас должен быть указатель на 'author_id', потому что я подозреваю, что это внешний ключ в таблице' author'. –

ответ

1

Почему бы просто не использовать условие IF в предложении WHERE?

UPDATE posts 
SET body = $body 
WHERE post_id = $post_id 
AND author_id = $author_id; 
2

Вы ищете это?

UPDATE posts 
    SET body = $body 
    WHERE post_id = $post_id AND 
     author_id = $author_id; 
0

Существует не IF пункт доступен в UPDATEв Postgres.

Вот Postgres doc, содержащий грамматику для UPDATE.

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

Другой вариант, хотя вы все равно должны включить его в пункте WHERE, будет инкапсулировать логику проверки в функции пл/PGSQL. Если у вас была такая же логика проверки, какая вам нужна в кучке запросов, это может быть более чистым способом централизации логики и уменьшения дублирования в запросах.

Смежные вопросы