我有一个看起来像这样的表:
*(&x + 0)
我想从prabhat更改名称 - > Ashok和Ashok - >单个查询中的prabhat
感谢。
答案 0 :(得分:5)
这里的一个聪明诀窍是在一个表上与name
列匹配的prabhat
列上自我加入表,在另一个表上匹配Ashok
(反之亦然)。然后,您只需执行一次SET
即可更新值。
UPDATE yourTable t1
INNER JOIN yourTable t2
ON (t1.name = 'prabhat' AND t2.name = 'Ashok') OR
(t1.name = 'Ashok' AND t2.name = 'prabhat')
SET t1.name = t2.name
答案 1 :(得分:5)
处理此问题的一种方法是使用CASE
语句有条件地更新name
列:
UPDATE table1 t
SET t.name = CASE WHEN t.name = 'ashok' THEN 'prabhat'
WHEN t.name = 'prabhat' THEN 'ashok'
END
答案 2 :(得分:0)
如果你选择,很容易:
SELECT id, `date`,
if (name = 'prabhat', 'Ashok', if (name = 'Ashok', 'prabhat', name)) AS name
FROM tab
如果更新,则需要使用临时值(tab.name中不存在)
-- check if temp name exists
SELECT count(*) FROM tab WHERE name = 'NON-EXIST-temp-name';
UPDATE tab SET name = 'NON-EXIST-temp-name'
WHERE name = 'prabhat';
UPDATE tab SET name = 'prabhat'
WHERE name = 'Ashok';
UPDATE tab SET name = 'Ashok'
WHERE name = 'NON-EXIST-temp-name';
在我回答之后,我发现Tim也提出了一个聪明的答案,如果你在逻辑上并不强大,可能会尝试这种直接的方法