2016-08-19 67 views
0

我有一个表,看起来像这样:如何交换列的值在一个查询中的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在单个查询中

谢谢。

+0

你是什么企图? – Rupsingh

+0

我正在用三个更新命令使用临时字符串。 – mystertyboy

回答

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'; 

在我回答之后,我发现蒂姆也提出了一个聪明的答案,如果你不是逻辑强大的,可能试试这个直接的方法

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 
5

一种方法是使用CASE语句来有条件地更新name柱:

UPDATE table1 t 
SET t.name = CASE WHEN t.name = 'ashok' THEN 'prabhat' 
        WHEN t.name = 'prabhat' THEN 'ashok' 
      END 
+0

你并不需要replace()调用,只需在当前子句中使用'prabhat'或'ashok'。您可能还想使用where子句来加速更新。另外,提供一些关于建议查询如何工作的解释并不会造成什么影响。 – Shadow