首页 > 解决方案 > 从mysql中的同一个表复制行但改变某些列

问题描述

我需要从同一个表中复制一行并编辑某些列以创建新行的帮助。

示例表(是的,我知道没有主键):

CREATE TABLE myTable (
    columnToNotChange JSON, -- this column does not change
    columnToNotChangeTwo VARCHAR(5), -- this column does not change either
    columnToChange BOOLEAN -- this column I want to change 
);

假设我有一排:

columnToNotChange = '{json_object: []}'
columnToNotChangeTwo = "const"
columnToChange = true

我想知道的是如何从 columnToNotChange 和 ColumnToNotChangeTwo 复制数据但更改 columnToChange 以在表 myTable 中创建一个新行。

我听说过 UPDATE FROM (SELECT) 语句,但没有找到关于 UPDATE FROM (SELECT) 语句的 MySQL 任何好的文档。

我看过Generic Stackoverflow QuestionMySQL Documentation on The UPDATE statementW3Schools SQL UPDATE Statement

我很感激任何帮助。

标签: mysqlsql

解决方案


假设您要复制 pk id = 1 的行


如果您想要一个新行并且除 columnToNotChange 、 columnToNotChangeTwo 之外的所有列都为空值,您应该使用 INSERT SELECT

然后

insert into myTable  ( columnToNotChange , columnToNotChangeTwo  )
select columnToNotChange , columnToNotChangeTwo 
from myTable  
where id = 1 

如果您想为列 columnToChange 分配一些值,然后在第 3 列分配,那么您需要的值

insert into myTable  ( columnToNotChange , columnToNotChangeTwo ,columnToChange   )
select columnToNotChange , columnToNotChangeTwo, 'THE VALUE YOU WANT FOR columnToChange'
from myTable  
where id = 1 

推荐阅读