回答

收藏

如何使用选择SQL语句(Oracle DBMS)产生两个数据集的合并?

技术问答 技术问答 179 人阅读 | 0 人回复 | 2023-09-13

插入两个表中的数据SQL什么是句子?比如我有。events_source_1表(列:event_type_id,event_date)和events_source_2表(同列)和events_target表(列:event_type_id,past_event_datenullalbe,future_event_date可为空)。2 V! ~! G2 u5 T+ I4 I3 V
Events_source_有过去的事件,Events_source_2有未来的事件,收获event_target将在同一行中相同event_type_id包括过去和未来的事件。如果没有past_events,而是future_events,不会设置past_event_date,而只会设置future_event_date,反之亦然。2 a; S1 I9 v6 v' h
非常感谢您帮我解决这个问题。
: x. c2 L8 C; Q) X% G9 }) r4 }                                                               
3 G3 o# I% J6 j% i( k; U: M& t" {    解决方案:                                                               
, I2 T. T" F* l4 B+ r) Z                                                                Roman,您需要将您的选择与任何给定事件类型完全外部联系起来ID(我假设你在过去和未来的任何特定事件类型的表中ID将有0或1行),您将输出一行,以及相应的null和non-null日期。
2 ~' h" E% V$ `7 i第一个答案不会将两个来源的日期合并到一行,我相信这是你要求的。
' i$ O: d; M4 c4 R3 x' S' i  c/ u第二个答案更接近,但由于内部连接,它只适用于既有过去日期又有未来日期的行(即每个表中的一个)。
! `) v, A3 u1 Y+ ?9 J( z例子:% L& W; m  H7 J  }
insert into event_target (event_type_id,past_event_date,future_event_date)  select nvl(p.event_type_id,f.event_type_id),p.event_date,f.event_date  from  events_source_1 p full outer join  events_source_2 f on p.event_type_id = f.event_type_id  b  {& z1 R& g. l8 u  _- s
请注意,nvl函数适用于Oracle,它将使用它看到的第一个非非null值。ISNULL可以用于SQL Server。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则