Оператор SQL для переключения значений - PullRequest
1 голос
/ 09 июня 2009

У меня есть несколько таблиц, где поле имеет приоритет (от 1 до 5). Проблема здесь в том, что разные проекты используют 5 как наивысший, а некоторые - наивысший, и я собираюсь согласовать это.

Мой простой вариант - создать временную таблицу, скопировать данные и переключиться так:
1 -> 5
2 -> 4
3 -> 3
4 -> 2
5 -> 1

Я не очень хорошо разбираюсь в SQL, но мне кажется, что должен быть простой способ сразу переключить эти значения с помощью оператора, но у меня есть опасения по поводу того, когда существует огромное количество данных и что-то идет не так, как надо. тогда данные будут в беспорядке.

Должен ли я просто использовать решение для временных таблиц или у вас есть хороший способ сделать это прямо в SQL? (Oracle 10g используется)

Большое спасибо!

Ответы [ 3 ]

13 голосов
/ 09 июня 2009

просто обновите вторую таблицу следующим образом: временная таблица не нужна, потому что вы просто меняете приоритет:

update table_2
set priority = 6-priority;
4 голосов
/ 09 июня 2009

Вы можете использовать оператор CASE

case PRIORITY
  when 5 then 1
  when 4 then 2
  when 3 then 3
  when 2 then 4
  when 1 then 5
  else PRIORITY
end

Редактировать: решение texBlues намного лучше, но я оставляю это здесь для случаев, когда математика не так хороша.

0 голосов
/ 09 июня 2009

Чтобы быть уверенным, что в случае обновления не получится «беспорядок», используйте транзакцию. Опираясь на решение tekBlues (+1 за это).

START TRANSACTION;

update table_2
set priority = 6-priority;

...

COMMIT;

Это особенно актуально, если вы хотите обновить несколько таблиц за один раз. Отдельные утверждения неявно обрабатываются, как правильно указывал hainstech в своем комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...