开发oracle sql来构建维度

时间:2017-02-03 20:18:06

标签: sql oracle

enter image description here我有三个规范化形式的表,这些表由java应用程序填充。

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以正确开发以匹配源帐户以及用户和仓库表?

2 个答案:

答案 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。