MA_COMPANY_PROFILE (table 1)
MA_ACCOUNT (table 2)
SEC_USER (table 3)
Hierarchy is from MA_COMPANY_PROFILE, MA_ACCOUNT, SEC_USER.
relationship between MA_COMPANY_PROFILE and MA_ACCOUT is 1:n
relationship between MA_COMPANY_PROFILE and SEC_USER is n:n
relationship between MA_ACCOUNT and SEC_USER is n:1
当我们在informatica中使用下面的sql以非规范化格式加载这些数据时,
select *
from
MA_COMPANY_PROFILE MA_CMY_PRF,
MA_ACCOUNT MA_AC,
ACCOUNT_STATUS AC_ST,
SEC_USER SEC_USR,
SEC_USERS_LASTLOGIN SEC_USR_LL
where
MA_CMY_PRF.PROFILE_ID=MA_AC.PROFILE_ID(+) and
MA_CMY_PRF.PROFILE_ID =SEC_USR.PROFILE_ID(+)
我们在源表和仓库表中获得不同数量的帐户 或者当我们尝试匹配源和仓库中的安全用户数时。
我们如何处理此问题或准备oracle sql以正确开发以匹配源帐户以及用户和仓库表?
答案 0 :(得分:0)
如果我们只是谈论有关的3个表而忽略了没有条件的2个表...你应该从一个表流到inter表,从inter表到最终表,所以最终条件看起来像
MA_CMY_PRF.PROFILE_ID = MA_AC.PROFILE_ID AND MA_AC.USER_ID = SEC_USR.USER_ID
这假设PROFILE_ID是MA_COMPANY_PROFILE的主键,USER_ID是SEC_USER的主键,并且MA_ACCOUNT表上都有外键。你也使用(+)大概是为了确保在没有找到匹配的情况下,你总是有一个记录只填充MA_CMY_PRF的信息和相关表中的空值,我把它关了,因为我不知道你的要求。
答案 1 :(得分:0)
我发现源表计数和目标计数与profile_id,account_id,user_id不匹配的原因。由于源表在我的连接列中具有空值,即profile_id。