Oracle 如何在ODI上在两个表之间进行特殊连接

Oracle 如何在ODI上在两个表之间进行特殊连接,oracle,join,oracle-data-integrator,Oracle,Join,Oracle Data Integrator,我想在两个表(A和B)之间连接,我想插入不在表B中且不在交叉点上的行(如图所示),将它们插入表B 如果我使用sql,我可以这样做: SELECT * FROM A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL 但是在ODI上。我做不到。我只是coched了左外连接,但它并没有解决我的问题,通过左外连接,我可以获取表A上的所有行以及A和B之间相交的行 我需要的是只提取表A上的所有行,而不提取交叉点上的行。我怎样才能在ODI上解决这个问题 非常感

我想在两个表(A和B)之间连接,我想插入不在表B中且不在交叉点上的行(如图所示),将它们插入表B

如果我使用sql,我可以这样做:

SELECT *
FROM A
LEFT JOIN B ON A.key = B.key
WHERE B.key IS NULL
但是在ODI上。我做不到。我只是coched了左外连接,但它并没有解决我的问题,通过左外连接,我可以获取表A上的所有行以及A和B之间相交的行

我需要的是只提取表A上的所有行,而不提取交叉点上的行。我怎样才能在ODI上解决这个问题

非常感谢你的帮助

select col1,col2.... from A 
minus 
select col1,col2.... from B
或者如果A和B有不同的结构,那么

 select * from A 
 where A.key not in (select distinct(key) from B)

如果您使用的是odi11g,那么您可以在黄色(临时)界面中进行连接,他们可以在蓝色界面中重用该界面,您可以在其中应用过滤器。确保在蓝色界面的源上选择“用作派生语句(子选择)”。通过这样做,黄色界面将成为一个子查询,并且您可以确保在联接之后应用过滤器


如果您使用的是ODI12C,那么您可以在数据集组件中进行连接,并在数据集的输出上添加过滤器。因此,您可以确定在联接之后应用了筛选器。

您应该能够使ODI生成您提供的SQL,而无需使用基于集合的操作(减号),这也应该执行得更好

您是否可以确保在映射中拆分逻辑,并将
A.key=B.key
条件放入联接中,并且一个单独的筛选器
B.key为NULL

这应该可以工作:

  • 您可以在ODI接口中为a.key=B.key创建内部联接
  • 编辑此内部联接并将联接条件替换为A.key(+)=B.key
  • 保存接口
  • 在带有
    的界面中创建一个过滤器,其中B.key为NULL

  • 那么你的意思是如果表A有1,2,3,表B有2,3,4,那么你只需要1?给出了下面的答案。检查并让我知道。我不想在SQL中使用它,我想在Oracle Data Integrator中使用它,您知道,在ODI 11g中,您可以使用两个数据集(它们之间有一个减号运算符)执行相同的操作。如果您使用的是ODI 12c,请使用集合组件。@JeromeFr我使用的是ODI 12c哦,是的,我看到了这个集合组件,我会使用它。感谢您的帮助,我们可以在哪里使用集合组件?我们可以对数据集做什么数据集和集合组件都可以在中找到。Oracle的ODI团队解释了如何使用Set和Dataset Components谢谢您的回答,请您知道我如何为映射创建临时表以便临时使用它吗?这在ODI 12c中是不可能的。您需要在数据库级别创建表并对其进行反向工程,或者手动创建数据存储并在KM中创建目标表。