将数据插入具有主键的表(多列)中,该表具有除主键以外的数据的另一个数据

Posted

技术标签:

【中文标题】将数据插入具有主键的表(多列)中,该表具有除主键以外的数据的另一个数据【英文标题】:Inserting data into a table(mutliple columns) which has primary key from another data which has data except primary key 【发布时间】:2021-11-30 04:24:54 【问题描述】:

我有一个包含 3 列 ID(主键)、名称、城市的表。

我需要从另一个只有名称和城市的表中导入数据。

我可以将插入写入表 1(Name, City) select Name, City from table2.

但是我需要表 1 中的 ID,需要使用序列插入。

我试过了:

插入 table1(ID, Name,City) 值(seq.nextval, select distinct name, city from table2)。但我收到一条错误消息,提示值数量不足。

我正在 SQL Oracle 中尝试它。有人可以帮我解决这个问题吗?

【问题讨论】:

将您的seq.nextval 放入select 没有工作@HoneyBadger。给我缺失的表达。 请编辑问题并显示表的实际 CREATE TABLE 语句 【参考方案1】:

您正在混合使用 insert ... valuesinsert ... select syntax。

您编辑了您的问题以包含 distinct,这意味着您有重复的名称/城市对,您想要禁止显示;但两个版本都没有收到您报告的错误。如果你没有重复,那么你可以这样做:

insert into table1(ID, Name,City)
select seq.nextval, name, city from table2;

如果确实有重复项,则不能只添加 distinct 关键字,而是可以使用子查询:

insert into table1 (id, name, city)
select seq.nextval, name, city
from (
  select distinct name, city
  from table2
);

db<>fiddle

您还可以通过触发器设置 ID。如果您使用的是最新版本,则可以改用标识列 - 但您使用 Oracle 11g 标记了问题,而这些问题不可用。

【讨论】:

以上是关于将数据插入具有主键的表(多列)中,该表具有除主键以外的数据的另一个数据的主要内容,如果未能解决你的问题,请参考以下文章

在 PetaPoco 中,如何装饰具有多列主键的表

如何将数据插入具有自动递增主键的 MySQL?

如何在具有symfony主键的表中插入值

如何通过多列理想地组合具有不同主键的两个表 HASH

具有多个附加到列表的主键的数据库

允许从重复记录中的一条记录到具有主键的表中