Выполнение WHERE IN для нескольких столбцов в Postgresql

У меня есть таблица 'answers' с индексированным целочисленным столбцом 'problem_id', целочисленным столбцом 'times_chosen' и столбцом 'option', который варчар. В настоящее время единственными значениями для столбца «option» являются «A», «B», «C» и «D», хотя они могут быть расширены позже. Я хочу увеличить на единицу значения «times_chosen» многих (50–100) ответов, когда я знаю идентификатор задачи и параметр каждого из них.

Поэтому мне нужен запрос примерно такого вида:

UPDATE answers
SET times_chosen = times_chosen + 1
WHERE (problem_id, option) IN ((4509, 'B'), (622, 'C'), (1066, 'D'), (4059, 'A'), (4740, 'A')...)

Возможно ли это ?

27
задан PreciousBodilyFluids 13 July 2011 в 00:01
поделиться

3 ответа

Должен, по крайней мере, я делал это раньше в других SQL.

Вы пробовали это? Вы можете проверить это с SET times_chosen = times_chosen

11
ответ дан 28 November 2019 в 05:35
поделиться

Вы можете присоединиться к своего рода виртуальной таблице:

SELECT * FROM answers
JOIN (VALUES (4509, 'B'), (622, 'C'), (1066, 'D'), (4059, 'A'), (4740, 'A')) 
    AS t (p,o)
ON p = problem_id AND o = option

Вы можете сделать нечто подобное с помощью UPDATE.

21
ответ дан 28 November 2019 в 05:35
поделиться

Вы, вероятно, ищете синтаксис стиля

SELECT * FROM foo, bar WHERE foo.bob = "NaN" AND bar.alice = "Kentucky";

. По сути, вы используете tablename.rowname, чтобы указать, какое именно поле вы ищете. Чтобы все выстроить правильно, вы добавляете предложения WHERE, обеспечивающие совпадение первичных ключей:

...WHERE foo.primarykey = bar.primarykey

или аналогичные. Вы бы хорошо, чтобы посмотреть внутренние соединения.

0
ответ дан 28 November 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: