【发布时间】:2015-04-06 13:02:16
【问题描述】:
我对这种查询有疑问。我正在将 ETL 从 Access 迁移到 SSIS。一个查询涉及与 Oracle 数据库中的表的内部联接:
SELECT
SQL_TABLE.COLUMN1,
SQL_TABLE.COLUMN2,
ORACLE_TABLE.COLUMN5,
ORACLE_TABLE.COLUMN6
FROM
SQL_TABLE INNER JOIN ORACLE_TABLE ON
SQL_TABLE.ID_PPAL = ORACLE_TABLE.IDENTIF
WHERE
(((ORACLE_TABLE.COLUMN6) Is Not Null));
问题是,Oracle 表有超过 1800 万个寄存器,而 sql 表有不到 300 条记录。结果,Inner Join 应该给出 2500 条记录。
首先我尝试使用如图所示的合并连接任务,但是由于表的特性,这根本没有效率,但是寻找可能的情况有人建议我使用查找任务,但是这只会给我找到的每场比赛一个记录,这对我没有用,我不能丢失任何记录。
我想知道是否有其他方法可以执行此查询,因为我无法相信在这方面访问会比 SSIS 更有效。
【问题讨论】:
-
您是否仅使用内部连接将它们完美连接并检查是否有任何重复行
-
为什么你说你不能丢失任何行?如果您以前使用 INNER 连接执行此操作,则只会返回匹配的行,并且所有不匹配的行都会丢失。如果您正确实施,应该可以通过查找来做到这一点。
-
Oracle 中的 identif 列不是 PK,Oracle 中的 PK 是组合的,所以,只有这个值的内连接可以给我几个结果,但查找只给我第一个匹配。
-
好吧,我误解了想要的结果。在这种情况下,不,您不能使用 Lookup 来做您想做的事。 @Benjamin 的回答是最好的解决方案。
标签: sql-server oracle ssis lookup