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

时间:2015-09-14 09:59:20

标签: 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上。我无法做到。我只是讨论了左外连接,但它没有解决我的问题,通过左外连接我可以获取表A上的所有行和A和B交叉点上的行。

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

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:1)

这应该有效:

  1. 您可以在ODI接口
  2. 中为A.key = B.key创建内部联接
  3. 编辑此内部联接并使用A.key(+)= B.key
  4. 替换联接条件
  5. 保存界面
  6. 使用WHERE B.key IS NULL
  7. 在界面中创建过滤器

答案 1 :(得分:0)

如果您使用的是ODI 11g,则可以在黄色(临时)界面中进行连接,它们会在蓝色界面中重用该界面,您可以在其中应用过滤器。确保在蓝色界面中的源上选择“用作派生语句(子选择)”。通过这样做,黄色界面将是一个子查询,并且您确定在连接后应用了过滤器。

如果您使用的是ODI 12c,则可以在数据集组件中进行连接,并在数据集的输出上添加过滤器。因此,您确定在加入后应用了过滤器。

答案 2 :(得分:0)

你应该能够让ODI生成你提供的SQL,而不需要求助于基于集合的操作(MINUS),这也应该表现得更好。

您能否确保在映射中拆分逻辑并将A.key = B.key条件放入JOIN并将分开过滤器B.key IS NULL