我正在尝试使用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';
请帮忙
答案 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'
希望这有帮助。