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 从一个表插入到另一个表时如何避免重复行?
oracle中如何将数据从一个表复制到另一个表(仅复制其中某些字段)