2016-01-15 7 views
0

Моя текущая таблица:Обновление нескольких строк в одном запросе

id | count | group_id 
1 1  employee 
2 2  employee 
3 3  employee 
4 4  employee 

Что я хочу:

id | count | group_id 
1 4  employee 
2 3  employee 
3 2  employee 
4 1  employee 

То, что я пытался

UPDATE table SET count = 4 WHERE count = 1 AND group_id='employee'; 
UPDATE table SET count = 3 WHERE count = 2 AND group_id='employee'; 
UPDATE table SET count = 2 WHERE count = 3 AND group_id='employee'; 
UPDATE table SET count = 1 WHERE count = 4 AND group_id='employee'; 

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

+0

Какова логика новых значений? –

+0

Это фактически колонка с именем ordering. И они хотят отменить этот заказ. –

ответ

1

Этот конкретный случай может быть решена так:

UPDATE table SET count = 5 - count 
WHERE count between 1 and 4 AND group_id= 'employee'; 

Более общее решение, использовать CASE выражение:

UPDATE table SET count = case count when 4 then 1 
            when 3 then 2 
            when 2 then 3 
            when 1 then 4 
         end 
WHERE count between 1 and 4 AND group_id = 'employee'; 
+0

мой плохой, он должен быть «служащим» –

+0

Теперь исправлено ... – jarlh

Смежные вопросы