从第 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
值是空值)
还有一个名为EMPHD
和hire_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 行开始将行从一个表插入到另一个表?的主要内容,如果未能解决你的问题,请参考以下文章
使用 INSERT 查询将行从一个表复制到另一个表 [关闭]