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

复制行但使用新ID

桂宏旷
2023-03-14
问题内容

我有一个表“测试”,具有自动递增id和任意数量的列。

我想在此表中复制一行id,当然所有的列都相同。

有没有一种方法可以不命名所有列?

我以为INSERT... SELECT... ON DUPLICATE KEY会对我有所帮助,直到我意识到它永远不会产生INSERT ON DUPLICATE,它只会更新现有行。


问题答案:

假设您的表格包含以下字段:

( pk_id int not null auto_increment primary key,
  col1 int,
  col2 varchar(10)
)

然后,要将具有新键值的值从一行复制到另一行,以下查询可能会有所帮助

insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;

这将产生一个新的价值pk_id领域和值复制col1,并col2选定行的。

您可以扩展此示例以在表中申请更多字段。

更新
在适当尊重JohnP和Martin的意见 -

我们可以使用临时表首先从主表缓冲,然后使用它再次复制到主表。仅更新临时表中的pk参考字段将无济于事,因为它可能已存在于主表中。相反,我们可以从临时表中删除pk字段,并将所有其他字段复制到主表中。

参考Tim
Ruehsen
在相关帖子中的回答:

CREATE TEMPORARY TABLE tmp SELECT * from my_table WHERE ...;
ALTER TABLE tmp drop pk_id; # drop autoincrement field
# UPDATE tmp SET ...; # just needed to change other unique keys
INSERT INTO my_table SELECT 0,tmp.* FROM tmp;
DROP TEMPORARY TABLE tmp;

希望这可以帮助。



 类似资料:
  • 类似于这样: 对Docker来说这可能吗?

  • 我使用SQL Server Management Studio在MS SQL数据库上运行了一个查询,一些字段包含新行。我选择将结果保存为csv,显然MS SQL不够智能,无法给我一个格式正确的CSV文件。 其中一些带有新行的字段用引号包装,但有些不是,我不知道为什么(如果它们包含多个新行,似乎会引用字段,但如果它们只包含一个新行,则不会,感谢Microsoft,这很有用)。 当我试图在Excel中

  • 问题内容: 鉴于以下内容(表1): 我想将Field1和Field2的值插入到另一个表(Table2)中。表2具有自动递增整数主键。我想从Table2中检索新的PK,并更新上面的ID列(表1)。 我意识到这不是传统的做法-这不是我需要定期执行的工作,只是一次性完成一些迁移工作。我使用进行了一些尝试,但失败了。“回送”到表1中的PK必须与插入的Field1 / Filed2的值相关。 问题答案: 您

  • 问题内容: 在Dockerfile中,我有 我想排除整个目录,例如我的node_modules目录。 像这样: Docker有可能吗? 问题答案: 在您的docker build上下文目录中创建文件(因此,在这种情况下,很可能是node_modules的父目录),其中只有一行: 尽管您可能只想: 有关dockerignore的信息:https ://docs.docker.com/engine/r

  • 问题内容: 我正在尝试使用此查询使用限制更新一组5行,但mysql显示错误..下面的一个正在工作 为什么第一个不起作用? 问题答案: 如果您确实必须这样做,可以使用以下方法:

  • 问题内容: 我要复制很多行,但是我需要更改一个字段。 我可以选择要复制的行: 现在,我想复制所有的行而设置创建新行来。我该怎么做? 问题答案: 在这里,col2,…代表表中的其余列(Event_ID 以外的 列)。