从第 1 行开始将行从一个表插入到另一个表?

Posted

技术标签:

【中文标题】从第 1 行开始将行从一个表插入到另一个表?【英文标题】:Inserting rows from one table to another starting from row 1? 【发布时间】:2020-01-22 15:07:56 【问题描述】:

开始学习 ORACLE SQL,这是我不明白的东西。

我有一个看起来像这样的EMPLOYEES 表(hire_date 值是空值)

还有一个名为EMPHDhire_date 的表

如何将EMPHD 中的HIRE_DATE 值添加到EMPLOYEES 表中,从第一行开始一直向下?

如果我使用这样的东西

INSERT INTO EMPLOYEES (HIRE_DATE)
SELECT HIRE_DATE FROM EMPHD

显然,我最终在表格末尾添加了雇用日期,所有其他值都为空。

对不起我的英语,请帮忙!

【问题讨论】:

你想要更新,而不是插入。 没有“第一行”这样的东西。您需要使用 ORDER BY 子句对结果进行排序。 EMPHD 表需要有某种键列来链接这两个表。 好的,我在两个表中都添加了 ID 列,下一步是什么? 欢迎堆栈溢出。正如@OldProgrammer 所说,没有保证数据的顺序。因此,您拥有的“EMPHD”表没有多大意义,因为它没有将受雇者与任何员工联系起来。它也应该有employee_id,然后您可以插入相应员工的hiredate。先了解一下关系数据库概念会很有用。 如果您添加了列,请使用更新的信息编辑您的问题。截图非常难用,代码 sn-ps 容易很多 【参考方案1】:

一个选项是使用合并。通过使用合并,如果 ID 值匹配,您可以更新 hire_date 列。否则,只有两列的值可能会作为新记录插入到 employees 表中,但由于所有相互匹配的 19 个 ID 值似乎并非如此:

merge into employees e
using (select id, hire_date from emphd) h
   on ( e.id = h.id )
 when matched then update set e.hire_date = h.hire_date 
 when not matched then insert( e.id, e.hire_date ) 
                       values( h.id, h.hire_date );

Demo 1

或者,您可以通过这些表的 ID 值之间的相等性直接使用更新语句:

update employees e
   set e.hire_date = (select hire_date from emphd where id = e.id);

Demo 2

【讨论】:

哇,先生,您的问题完全正确,并且帮了很多忙。有合并的想法,但无法正确执行。 @BarbarosÖzhan 。 . .更新就简单多了。

以上是关于从第 1 行开始将行从一个表插入到另一个表?的主要内容,如果未能解决你的问题,请参考以下文章

将行从一个链接表插入到另一个链接表

调用触发器时将行从一个表复制到另一个表

根据 Id [重复] 将行从一个表更新到另一个表

使用 INSERT 查询将行从一个表复制到另一个表 [关闭]

如何将行从一个 Excel 工作表复制到另一个工作表并使用 VBA 创建重复项?

sql 将行从一个表复制到另一个表