Mysql:交换不同行的数据

标签 mysql sql

假设一个表格 fruits 看起来像这样:

------------------------------------------
| id |    name    |   color   | calories |
------------------------------------------
| 1  | apple      | red       | 20       |
| 2  | orange     | orange    | 10       |
| 3  | grapes     | green     | 5        |
| 4  | bananas    | yellow    | 15       |
| 5  | plum       | purple    | 25       |
------------------------------------------

我如何交换一行的值,与另一行的值保持不变?

例子:

SWAP ROW WITH ID "5" WITH ROW WITH ID "2"

结果:

------------------------------------------
| id |    name    |   color   | calories |
------------------------------------------
| 1  | apple      | red       | 20       |
| 2  | plum       | purple    | 25       |
| 3  | grapes     | green     | 5        |
| 4  | bananas    | yellow    | 15       |
| 5  | orange     | orange    | 10       |
------------------------------------------

请注意,除了 id 之外,所有值都是完整的。 我需要使用一个非常大的值列表来执行此操作,因此我需要一个单行代码,或者最多需要一个不需要创建临时表之类的东西。

注意:id 是唯一的

谢谢

最佳答案

您可以使用连接不等式来排列要交换的行:

update fruit a
 inner join fruit b on a.id <> b.id
   set a.color = b.color,
       a.name = b.name,
       a.calories = b.calories
 where a.id in (2,5) and b.id in (2,5)

http://sqlfiddle.com/#!18/27318a/5

关于Mysql:交换不同行的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17433666/

相关文章:

php - 使用简单的 HTML 表单和 PHP 创建一个 "Upvote"按钮

javascript - 使用nodejs将mysql数据从模块返回到app.js

mysql - 在 SQL 中获取不同的子字符串

MYSQL JOIN 2表并返回逗号分隔字段

SQL-如何在自动生成的临时表中添加自动增量ID

mysql - 在 mysql 查询中使用 if 语句

php - 在 AngularJS 中捕获 PDO 异常

php - 从派生表中提取列并将它们汇总到一个 MySQL SELECT 语句中

mysql - Node.js ES6 类私有(private)存储

sql - 带计数子查询、内部联接和组的查询