2014-11-17 3 views
2

Мне нужно обновить строку в моей таблице.
Эта задача как замена значения конкретного столбца в таблице.
Я не использую PRIMARY KEY или UNIQUE KEY (потому что я не могу вставить дублирующее значение в этот конкретный столбец).Как обновить конкретный столбец без дубликата и как заменить значение

+-----+-----+-----+ 
| id |col1 |col2 | 
+-----+-----+-----+ 
| 1 | a | 404 | 
+-----+-----+-----+ 
| 2 | b | 22 | 
+-----+-----+-----+ 

Теперь я обновить таблицу:

UPDATE table_name SET col2 = 0 WHERE col2 = 404; 
    UPDATE table_name SET col2 = 404 WHERE id = 2;  

This result I want. 
+-----+-----+-----+ 
| id |col1 |col2 | 
+-----+-----+-----+ 
| 1 | a | 0 | 
+-----+-----+-----+ 
| 2 | b | 404 | 
+-----+-----+-----+ 

Я использовал два запроса для того, чтобы сделать это. Есть ли какая-либо возможная функция в одном запросе? (OR) есть ли более простой способ?

ответ

2

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

UPDATE table_name 
SET col2 = CASE col2 WHEN 0 THEN 404 WHEN 404 THEN 2 END 
WHERE col2 IN (2, 404); 

Но, честно говоря, используя два отдельных заявления, кажется мне яснее.

+0

просто супер .. работа для меня @Mureinik –

0

Как уже сказал Mureinik, вы можете использовать выражение case. Лучше иметь одно обновление, особенно если вы создаете два запроса для двух обновлений в настоящее время. Однако, если порядок выполнения важен по какой-то причине, то вы не можете собрать их вместе.

+0

Да. Вы правы @ Lajos.Но я использую выражение CASE для своей функции –

+0

Тогда я верю, что вы должны принять либо ответ Мурейника, либо мою, но я бы принял его ответ, если бы я был вами, поскольку мой ответ добавляет только хороший бонус к его оригинальной идее. –