当前位置: 首页 > 面试题库 >

Mysql:交换不同行的数据

秦学林
2023-03-14
问题内容

假设一个表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       |
------------------------------------------

如何将一行的值与另一行 交换 ,而使ID号保持不变?

例子:

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



 类似资料:
  • 这是一个有点复杂的解释,所以我希望它足够清楚,但如果不是,我会尝试和扩展更多。 所以我有一个这样的数据帧:

  • 问题内容: 我在SQL查询中使用sum()寻找帮助: 我使用它是因为我正在执行“分组依据”,这可以确保同一行不会被重复计数。 问题是SUM(conversions.value)对每行的“值”计数超过一次(由于分组依据) 我基本上想为每个DISTINCT conversions.id 做。 那可能吗? 问题答案: 我可能是错的,但据我了解 conversions.id* 是表 转换 的 主键 * s

  • 我想从数据库中列出交换机名称,为此,我已经为Recyclerviewlist实现了应用程序。现在,问题是,我的Recyclerview项包含switch元素,我想在打开或关闭它时执行两个功能。这可能吗?我在chick listener的视图保持器上尝试了它,但它为每个列表元素提供了相同的id。

  • 问题内容: 我有一个有趣的查询需要做。我有一张表,其中有一列包含ip地址编号(使用)和一列。我希望能够计算每天有唯一IP地址列的数量。也就是说,每天有多少个不同的ip行。因此,例如,如果一个IP地址在同一天两次,则在最终计数中将计为1;但是,如果同一IP地址在另一天,则将被计算为第二个计数。 示例数据: 问题答案: SQLFiddle演示

  • 问题内容: 我有一张桌子: 数据库的其余整个部分都用外键键入areaid。在此表中,有一个具有唯一约束的(区域,区域设置)索引。 问题是我有两条记录: 我需要在它们之间交换(region,locale)字段,这样我才能得出: 天真的方法行不通,因为它违反了区域和​​语言环境的唯一索引: 我怎样才能做到这一点?是否有原子方式进行交换?有什么建议吗? 问题答案: 您不能在SQL Server中推迟对多

  • 问题内容: 我执行以下查询,由于某种原因,它没有替换数据库中的换行符。它说Rows匹配1,但没有变化。有什么问题吗? 问题答案: 您可以使用而不是匹配换行符。 代码: