使用单个SQL查询将数据交换为两列

时间:2019-05-11 05:49:05

标签: sql

用户在错误的列中输入了数据。 例如,我有一个包含两列申请人姓名和父亲姓名的表。数据操作员已在申请人姓名栏中输入父亲姓名,并在父亲姓名栏中输入申请人姓名。请提出一种交换两个列中数据的方法,即申请人名称列中的数据应移至父亲名称列,父亲名称列中的数据应移至申请人名称列。使用单个SQL查询

3 个答案:

答案 0 :(得分:1)

这听起来很有趣,但是您可以轻松地更改表并使用正确的标签来更改列名称。

答案 1 :(得分:0)

CREATE TABLE `swap_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `x` varchar(255) DEFAULT NULL,
  `y` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

INSERT INTO `swap_test` VALUES ('1', 'a', '10');
INSERT INTO `swap_test` VALUES ('2', NULL, '20');
INSERT INTO `swap_test` VALUES ('3', 'c', NULL);

解决方案是:

UPDATE swap_test SET x=(@temp:=x), x = y, y = @temp;

更多信息可以为found here

答案 2 :(得分:0)

您只需分配名称

update the_table 
    set applicant_name = father_name, 
        father_name = applicant_name
where ...; -- make sure to only do that for the rows that need it

SQL标准要求在赋值之前 评估右侧使用的值。

这适用于所有现代DBMS,但不适用于MySQL。如果您需要MySQL的解决方法,请参阅dexter的答案。

在线示例:https://rextester.com/RIK34525