Во-первых, зачем вам это делать в одном запросе? Если вам нужны обновления, сделанные атомарно, можете ли вы обернуть их в START TRANSACTION;
и COMMIT;
? Это, вероятно, то, что я бы сделал.
Однако, если вам действительно нужно сделать это в одном запросе, а количество строк, которые вы обновляете, достаточно мало, это можно сделать! Вы, вероятно, можете использовать этот уродливый маленький трюк:
UPDATE questions
SET
lab = IF(rnum=11, 'What sections...?',
IF(rnum=12, 'What is your...?',
IF(rnum=13, 'Etc.',
NULL
)
)
),
type = IF(rnum=11, 'textarea',
IF(rnum=12, 'radio',
IF(rnum=13, 'Etc.',
NULL
)
)
)
WHERE rnum IN (11, 12, 13);
Написание цикла в perl для создания этого урода природы оставлено в качестве упражнения:)
Если вы напишите это правильно и если таблица соответствует вашим ожиданиям, эти оставшиеся значения NULL никогда не должны использоваться. Для дополнительной безопасности вы можете объявить некоторые из этих столбцов равными NOT NULL
, если можете, так что, если ваш rnum
не совпадает, назначение вызовет сбой ограничения и UPDATE
будет прервано.