mysql在不使用临时表的情况下更新同一个表中的值

时间:2015-11-17 17:19:31

标签: mysql sql-update

我正在尝试使用update语句更新或更改相同表中的行之间的值。我不想使用临时表,而是在单个语句中进行更新。以下是数据

ID  Toy Color
1   Car red
2   barbie red
3   moto blue
4   cloud blue

我想用蓝色交换红色,保持id和其他数据相同。我尝试了下面的语句,但只有一种颜色得到更新,其他颜色设置为0。

UPDATE test1 t1, test1 t2 SET t1.Color = 'blue' and t2.Color = 'red' WHERE t1.Color = 'red' and t2.Color = 'blue';

请帮忙

2 个答案:

答案 0 :(得分:2)

AND是一个SQL布尔运算符,而不是列表分隔符。您需要在字段列表中使用逗号(,)进行更新:

UPDATE test1 t1, test1 t2 SET t1.Color = 'blue', t2.Color = 'red' WHERE t1.Color = 'red' and t2.Color = 'blue';
--                                             ^ comma here

实际上,这需要表格中的笛卡尔积。根据您的注释,您有500k实际行,因此这将是一个内存表,其中包含25,000,000,000行。所以,不是最好的方法。

如果您真的只是像这样切换两个值,您可能会发现更容易进行临时替换,而不是连接:

UPDATE test1 SET Color = 'TEMP' WHERE Color = 'red';
UPDATE test1 SET Color = 'red' WHERE Color = 'blue';
UPDATE test1 SET Color = 'blue' WHERE Color = 'TEMP';

答案 1 :(得分:1)

您也可以尝试使用JOIN

UPDATE test1 T1
INNER JOIN test1 T2 ON T1.Color = 'red' and T2.Color = 'blue'
SET T1.Color = 'blue', T2.Color = 'red'

希望这有帮助。