Вы обнаружите, что ошибка в системе неправильно называет мужчин (M) женщинами (W) и наоборот в базе данных. Столбцы допускают только один символ. Без использования временных таблиц напишите один запрос на обновление, чтобы решить эту проблему.
Этот вопрос был задан на одном из моих недавних интервью, и я собираюсь поговорить с другими, у которых могут быть похожие вопросы, поэтому я хотел понять, как с этим справиться.
Ответы:
Вы хотите использовать
CASE
выражение некоторого типа.В SQL Server код будет выглядеть так:
Редактировать: Как указано в комментариях (и некоторых других ответах), ELSE не требуется, если вы добавите предложение WHERE в утверждение.
Это позволяет избежать ненужных обновлений. В любом случае важно помнить, что есть и другие варианты, кроме M & W (например, NULL), и вы не хотите вводить ошибочную информацию. Например:
Это заменит все NULL (или другие возможные полы) на «M», что будет неверно.
Пара других вариантов будет
И более кратким
источник
IIF()
сIF()
и она будет работать в MySQL;)В Oracle вы можете использовать CASE, так как другие ответы:
Вы также можете использовать ДЕКОД:
источник
Для переключения между двумя значениями вы также можете попробовать этот трюк, который не использует
CASE
выражения (при условии, что здесь Transact-SQL):В зависимости от текущего значения
Gender
,ASCII(Gender)
будет отменять либо,ASCII('M')
либоASCII('W')
, оставляя другой код, который будет преобразованCHAR()
функцией обратно в соответствующий символ.Я оставляю это только для сравнения, хотя. Хотя эта опция может претендовать на элегантность, решение, использующее
CASE
выражение, возможно, будет более читабельным и, следовательно, более легким в обслуживании, и его будет определенно легче расширить до более чем двух значений.источник
M
иW
были введены в верхнем регистре, чтобы избежать неожиданного7
или `-` появления в результатах.ASCII(Gender)
сASCII(UPPER(Gender))
, что менее элегантно, хотя и не много.WHERE
предложением?Вы можете сделать это с помощью
case ... when
выражения:источник
Я бы использовал обновление с
case
выражением.источник
Вы можете выполнить это обновление, используя
case
выражение.Я бы предложил запустить ваше заявление об обновлении в транзакции и добавить простой запрос, такой как:
чтобы проверить результаты, которые вы получите. Выполнение транзакции с откатом и переключение на коммит, когда ваши результаты совпадают с ожидаемыми.
источник