我正在 Oracle Fusion Financials 中创建一个数据模型,以将各方匹配在一起,从供应商使用到客户使用。这些当事人有一个以他们的名义注册的代码。在 Google 上搜索表名将找到架构(例如HZ_PARTIES),尽管查看架构来解决此问题并不是非常必要。
我们的数据质量并不是我们想要的。为确保我不会丢失记录,我需要加入名称中也包含代码的其他方。
这是我到目前为止所拥有的,它给出了结果。
SELECT
RCTA.TRX_NUMBER
,RCTA.CT_REFERENCE
,HP.PARTY_NAME PARTY_NAME1
,HP2.PARTY_NAME PARTY_NAME2
,IEBC.IBAN CUSTOMER_IBAN
FROM
HZ_PARTIES HP,
HZ_PARTIES HP2,
IBY_ACCOUNT_OWNERS IAO,
IBY_EXT_BANK_ACCOUNTS IEBC,
RA_CUSTOMER_TRX_ALL RCTA,
HZ_CUST_ACCOUNTS HCA
WHERE 1=1
AND RCTA.BILL_TO_CUSTOMER_ID = HCA.CUST_ACCOUNT_ID (+)
AND HCA.PARTY_ID = HP.PARTY_ID(+)
AND REGEXP_SUBSTR(HP.PARTY_NAME,'([0-9]{2}[A-Z]{2}[0-9]{3})') in REGEXP_SUBSTR(HP2.PARTY_NAME,'([0-9]{2}[A-Z]{2}[0-9]{3})') -- Join on code found in party name.
AND IAO.ACCOUNT_OWNER_PARTY_ID (+) IN (HP2.PARTY_ID)
AND IAO.EXT_BANK_ACCOUNT_ID = IEBC.EXT_BANK_ACCOUNT_ID (+)
但是,这会执行内部联接而不是我需要的外部联接。
我尝试了以下方法,它给出了语法错误(缺少括号):
AND REGEXP_SUBSTR(HP.PARTY_NAME,'([0-9]{2}[A-Z]{2}[0-9]{3})') = REGEXP_SUBSTR(HP2.PARTY_NAME,'([0-9]{2}[A-Z]{2}[0-9]{3})') (+)
也试过这个,这使得查询运行时间过长。没有等待结果,因为它可能不正确:
AND ( REGEXP_SUBSTR(HP.PARTY_NAME,'([0-9]{2}[A-Z]{2}[0-9]{3})') = REGEXP_SUBSTR(HP2.PARTY_NAME,'([0-9]{2}[A-Z]{2}[0-9]{3})') (+) -- Join on investor code found in party name.
OR NOT REGEXP_LIKE(HP.PARTY_NAME,'([0-9]{2}[A-Z]{2}[0-9]{3})') -- Escape to outer join in case there's no investor code in name
)
如果有必要完成这项工作,我愿意将 (+) 连接重写为常规外连接语法。