У меня есть таблица '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')...)
Возможно ли это ?
Должен, по крайней мере, я делал это раньше в других SQL.
Вы пробовали это? Вы можете проверить это с SET times_chosen = times_chosen
Вы можете присоединиться к своего рода виртуальной таблице:
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.
Вы, вероятно, ищете синтаксис стиля
SELECT * FROM foo, bar WHERE foo.bob = "NaN" AND bar.alice = "Kentucky";
. По сути, вы используете tablename.rowname, чтобы указать, какое именно поле вы ищете. Чтобы все выстроить правильно, вы добавляете предложения WHERE, обеспечивающие совпадение первичных ключей:
...WHERE foo.primarykey = bar.primarykey
или аналогичные. Вы бы хорошо, чтобы посмотреть внутренние соединения.