我有一个表,看起来像这样:如何交换列的值在一个查询中的MySQL数据库
id name date
1 prabhat 22-12-1989
2 Ashok 20-12-1978
3 prabhat 22-12-1986
4 Ashok 20-12-1974
5 prabhat 22-12-1889
6 Ashok 20-12-1900
我想的名字从PRABHAT改变 - >阿肖克和Ashok-- > prabhat在单个查询中
谢谢。
我有一个表,看起来像这样:如何交换列的值在一个查询中的MySQL数据库
id name date
1 prabhat 22-12-1989
2 Ashok 20-12-1978
3 prabhat 22-12-1986
4 Ashok 20-12-1974
5 prabhat 22-12-1889
6 Ashok 20-12-1900
我想的名字从PRABHAT改变 - >阿肖克和Ashok-- > prabhat在单个查询中
谢谢。
如果你选择,很容易:
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';
在我回答之后,我发现蒂姆也提出了一个聪明的答案,如果你不是逻辑强大的,可能试试这个直接的方法
这里的一个聪明的技巧是自我加入你的表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
一种方法是使用CASE
语句来有条件地更新name
柱:
UPDATE table1 t
SET t.name = CASE WHEN t.name = 'ashok' THEN 'prabhat'
WHEN t.name = 'prabhat' THEN 'ashok'
END
你并不需要replace()调用,只需在当前子句中使用'prabhat'或'ashok'。您可能还想使用where子句来加速更新。另外,提供一些关于建议查询如何工作的解释并不会造成什么影响。 – Shadow
你是什么企图? – Rupsingh
我正在用三个更新命令使用临时字符串。 – mystertyboy