Oracle SQL:将选择从一个表插入另一个表,其中用户有多个带有订单号的条目

Posted

技术标签:

【中文标题】Oracle SQL:将选择从一个表插入另一个表,其中用户有多个带有订单号的条目【英文标题】:Oracle SQL: Insert select from one table to another where user has multiple entries with order number 【发布时间】:2014-05-06 02:46:14 【问题描述】:

A 表

User | Order | Type | Contact
1001, 2, email, ijk@test.com
1001, 1, cell, 1234567890
1001, 3, home, 9876543210
1002, 1, home, 1234567891
1002, 2, cell, 1987654321
1003, 1, email, abc@test.com

表 B

User | Email
1001, def@test.com
1002, geh@test.com
1003, abc@test.com

我想使用表 B 中的数据和该用户的最大订单数在表 A 中插入一行: 如果表 A 中没有该用户的电子邮件地址,请插入表 B 中具有最大订单号的电子邮件地址。 如果表 A 中的电子邮件与表 B 中该用户的电子邮件相同,则不要插入任何内容。 如果表 A 中的电子邮件与该用户的表 B 中的电子邮件不同,请插入表 B 中的电子邮件地址和最大订单号。

上述输出应插入表 A*

1001, 4, email, def@test.com
1002, 3, email, geh@test.com

我已经尝试了多种方法并且一直碰壁。关于走什么路线有什么建议吗?

【问题讨论】:

【参考方案1】:

如果我理解正确,您可以使用单个 insert 语句来做到这一点:

insert into tableA(user, order, type, contact)
    select user, maxorder + 1, 'email', email
    from tableB b cross join
         (select max(order) as maxorder from tableA) const
    where not exists (select 1
                      from tableA a
                      where b.user = a.user and b.contact = a.contact
                     );

注意:您使用的一些标识符,例如order,是保留字。我没有费心去逃避它们,假设它们只是例子。

【讨论】:

以上是关于Oracle SQL:将选择从一个表插入另一个表,其中用户有多个带有订单号的条目的主要内容,如果未能解决你的问题,请参考以下文章

将一个表的查询结果插入到另一个表中(oracle、mysql、sql 、GP)

使用 Oracle SQL 从一个表插入到另一个表时如何避免重复行?

sql语句从一张表查询一个字段值插入另一个表中

oracle中如何将数据从一个表复制到另一个表(仅复制其中某些字段)

Sql 从一个表列中选择一个最小值,并在一个 SQL 语句中将结果插入到另一个表列中

Oracle SQL:从一个表中选择一个计数,从另一个表中使用子查询缩小选择范围