如何在Mysql数据库中交换单个查询中的列值

时间:2016-08-19 05:46:56

标签: mysql

我有一个看起来像这样的表:

*(&x + 0)

我想从prabhat更改名称 - > Ashok和Ashok - >单个查询中的prabhat

感谢。

3 个答案:

答案 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也提出了一个聪明的答案,如果你在逻辑上并不强大,可能会尝试这种直接的方法