java 两个表同时插入数据,第二个表的一个字段是取第一个表的ID值 要怎么取 我拿到的都是空。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 两个表同时插入数据,第二个表的一个字段是取第一个表的ID值 要怎么取 我拿到的都是空。。相关的知识,希望对你有一定的参考价值。

这应该是主子表的关系,主表插入完成之后才能取到主表的id值 如果是同时插入数据,可以考虑在后台先生成主表id 然后将该id作为字段插入到子表中 也就是先把这两个表要插入的数据都准备好 主表的id也已经生成了 赋值给子表 然后两个表依次插入 参考技术A 说明插入数据还没有完成

在多个连接条件下将数据从第二个表插入一个表

【中文标题】在多个连接条件下将数据从第二个表插入一个表【英文标题】:Inserting data into one table from second table on multiple join condition 【发布时间】:2020-02-26 20:45:56 【问题描述】:

我正在尝试使用连接键字段将数据从第二个表 (src_tbl) 插入到一个表 (trgt_tbl) 中。查询似乎工作正常,但速度极慢。 trgt_tbl 中有大约 1600 万条记录,来自 src_tbl 的每日增量负载预计将有大约 50 万条记录。我正在尝试弄清楚我是否可以以更好的方式做到这一点。

注意:合并不是一个选项,因为数据是插入到 Redshift 中的,而 Redshift 不支持合并。

INSERT INTO trgt_tbl (col1,
    col2,
    col3,
    col4,
    col5,
    col6)
SELECT col1,
    col2,
    col3,
    col4,
    col5,
    col6 
FROM  src_tbl s  
WHERE NOT EXISTS (
    SELECT 1 
    FROM trgt_tbl t 
    WHERE 
        t.col1 = s.col1 
        OR t.col2 = s.col2 
        OR t.col3 = s.col3
        OR t.col4 = s.col4 
)

【问题讨论】:

你的实际目标是什么?您是否想做相当于UPSERT 的操作?您查看过Updating and Inserting New Data - Amazon Redshift 中的示例吗? 是的,这是一个 upsert。 但我正在尝试使用多个键来处理 upsert,这是一个挑战。 怎么样:Upsert in redshift 我尝试过这种方式,但收到错误消息:无效操作:关系“trgt_tbl”不存在; 【参考方案1】:

正如Database Developer Guide 中提到的那样,由于缺少对merge / upsert 的支持,您应该在临时表的帮助下使用更新和插入的组合来有效地执行合并。例如。您可以执行以下操作:

使用来自src_tbl 的数据创建一个临时表:

create temp table staging (like target); 
insert into staging select s.col1, s.col2, s.col3, s.col4, s.col5, s.col6 from src_tbl s JOIN trgt_tbl t ON 
    t.col1 = s.col1 
    OR t.col2 = s.col2 
    OR t.col3 = s.col3
    OR t.col4 = s.col4;

内连接暂存表以从trgt_tbl 中删除正在更新的行并插入暂存表中的行:

begin transaction;

delete from trgt_tbl using staging where t.col1 = s.col1 OR t.col2 = stage.col2 OR t.col3 = stage.col3 OR t.col4 = stage.col4; 
insert into trgt_tbl select * from staging;

end transaction;

【讨论】:

非常感谢您的回答。但我的源表已经在 Redshift 中,并且每天都会使用增量记录更新,仅针对需要在目标表中更新、插入或删除的最后一天。因此,我认为没有必要创建另一个临时表来执行相同的连接。如果我遗漏了什么,请告诉我。

以上是关于java 两个表同时插入数据,第二个表的一个字段是取第一个表的ID值 要怎么取 我拿到的都是空。。的主要内容,如果未能解决你的问题,请参考以下文章

如果一个表的列等于第二个表中的列,则在第三个表中插入值,python - mysql

在多个连接条件下将数据从第二个表插入一个表

根据 mongodb 中第一个表的结果从第二个表加载数据

在 Scala Play 框架中映射 OneToMany 不向第二个表插入数据

sql server 2000返回在第一个表中但不在第二个表中的数据

比较两个表的 xml [PENTAHO]