mysql交换两行或两列的值

本文介绍在MySQL中如何通过SQL语句实现两列值的交换以及两行值的交换,包括创建数据库和表,插入数据,使用UPDATE语句进行值交换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:

mysql left join中where和on条件的区别

一、交换两列的值(列名不变)

新建数据库和表,并插入数据

CREATE DATABASE test;

USE test;

CREATE TABLE `product` (
  `id`             INT(10) UNSIGNED       NOT NULL AUTO_INCREMENT
  COMMENT '产品id',
  `name`           VARCHAR(50)            NOT NULL
  COMMENT '产品名称',
  `original_price` DECIMAL(5, 2) UNSIGNED NOT NULL
  COMMENT '原价',
  `price`          DECIMAL(5, 2) UNSIGNED NOT NULL
  COMMENT '现价',
  PRIMARY KEY (`id`)
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

INSERT INTO `product` (`id`, `name`, `original_price`, `price`) VALUES
  (NULL, '雪糕', '5', '3.5'),
  (NULL, '鲜花', '18', '15'),
  (NULL, '甜点', '25', '12.5'),
  (NULL, '玩具', '55', '45'),
  (NULL, '钱包', '285', '195');

查询:

SELECT *
FROM product;

在这里插入图片描述

按别名查询:

#
SELECT *
FROM product AS a, product AS b
WHERE a.id = b.id;

在这里插入图片描述

交换两列的值(列名不变):

# 交换mysql的两列的值(列名不变)
UPDATE product AS a, product AS b
SET a.original_price = b.price, a.price = b.original_price
WHERE a.id = b.id;

再次查询:

SELECT *
FROM product;

在这里插入图片描述

可看到已改变。

二、交换两行的值(id不变)

新建数据库和表,并插入数据

CREATE DATABASE test;

USE test;

CREATE TABLE `rules` (
  `rule_id`   INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `rule_name` VARCHAR(255)     NOT NULL,
  `priority`  INT(11)                   DEFAULT NULL,
  PRIMARY KEY (`rule_id`)
);

INSERT INTO rules
(rule_id, rule_name, priority)
VALUES
  (1, 'Take one bread', 10),
  (2, 'Drink water', 20),
  (3, 'Eat candy', 30),
  (4, 'Wash hand', 40),
  (5, 'Give charity', 50);

查询:

SELECT * FROM rules;

在这里插入图片描述

按照别名和id查询:

SELECT *
FROM
  rules AS rule1
  JOIN rules AS rule2 ON
                        (rule1.rule_id = 1 AND rule2.rule_id = 4)
                        OR (rule1.rule_id = 4 AND rule2.rule_id = 1);

在这里插入图片描述

交换两行的值(除了id)

UPDATE
    rules AS rule1
    JOIN rules AS rule2 ON
                          (rule1.rule_id = 1 AND rule2.rule_id = 4)
                          OR (rule1.rule_id = 4 AND rule2.rule_id = 1)
SET
  rule1.priority  = rule2.priority,
  rule2.priority  = rule1.priority,
  rule1.rule_name = rule2.rule_name,
  rule2.rule_name = rule1.rule_name;

再次查询:

SELECT * FROM rules;

在这里插入图片描述

可看到两行已完成了交换。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值