Oracle-具有不相等条件的联接
我想将select in select in select等与一个表连接起来,在该表中,我不必从表中的selects结果中查找customer\ U no。 另外,为了优化和减少执行时间,我应该如何编写脚本? 前 IFLEX客户代表Oracle-具有不相等条件的联接,oracle,join,Oracle,Join,我想将select in select in select等与一个表连接起来,在该表中,我不必从表中的selects结果中查找customer\ U no。 另外,为了优化和减少执行时间,我应该如何编写脚本? 前 IFLEX客户代表 REF_NO CATEGORY TITULAR REPRESENTATIVE RELATIONSHIP 875497 C 875497 535555 UNICA 875497 C 875497 565796
REF_NO CATEGORY TITULAR REPRESENTATIVE RELATIONSHIP
875497 C 875497 535555 UNICA
875497 C 875497 565796 UNICA
875497 C 875497 875497 PRIMARY-MEANS I AM AUTHORIZED ON MY ACCOUNT
875497 C 875497 875497 UNICA-MEANS I AM AUTHORIZED ON MY ACCOUNT
875497 C 875497 0O00000 EXTERN -- MEANS EVERYONE CAN PUT MONEY ON MY ACCOUNT
IFLEX_客户
CUSTOMER_NO LEGACY_CUSTOMER_NUMBER_KEY UNIT_ID CUST_CATEGORY CUST_CLASSIFICATION CUST_TYPE KYC_CUST_TYPE CIF_SINCE FISCAL_ID FULL_NAME FISCAL_RESIDENCE_COUNTRY NIF_EXPIRED_DATE NIF SET_ACT_ID_1 SET_ACT_ID_2
875497 875497 xxx RETAIL 80 I R 254911 2548614654 LACAN MARIA ADRIANA RO 01/03/2016 CI+XX+8646844+SPCLEP SIMM+01-Oct-2015+06-Dec-2022 +FN+FN+++
输出:
CUSTOMER_NO STR_DATA_EXPIRARE_1 DATA_EXPIRARE_BULETIN_1 STR_DATA_EXPIRARE_2 DATA_EXPIRARE_BULETIN_2
535555 29-Apr-16 29-Apr-16 NULL 30-Dec-99
0Jxx1ds0 09-Sep-16 09-Sep-16 NULL 30-Dec-99
2xx8ds 24-Mar-16 24-Mar-16 NULL 30-Dec-99
2756719 20-Feb-17 20-Feb-17 NULL 30-Dec-99
该客户不得在该银行拥有任何账户坦率地说,我将忽略这一杂乱无章的代码块,并使用您应该发布的集中、可复制的测试用例来回答问题: 你需要的是反加入。使用left join语法将客户与帐户连接起来,然后在帐户密钥为null的情况下筛选结果。这将为您提供无帐户的客户。但内部加入客户和代表,以确保客户群仅限于代表
select c.customer_no
, c.expired_date
from customers c
inner join customers_repres cr
on cr.representative_id = c.customer_no
left outer join accounts_iban ai
on ai.cust_key = c.customer_no
where c.expired_date is not null -- ?? indicates expired ID ??
and ai.cust_key is null
已解决:
select * from STAGE_CORE.IFLEX_CUSTOMERS c
join
STAGE_CORE.IFLEX_CUSTOMERS_REPRES cr
on c.CUSTOMER_NO=cr.REPRESENTATIVE
left join STAGE_CORE.VW_IFLEX_ACCOUNTS_IBAN a
on a.cust_key=cr.REPRESENTATIVE
where cr.RELATIONSHIP<>'PRIMARY'
and a.CUST_KEY is not null
如果您能为每个表提供示例数据,以及该数据的预期结果,这将非常有用。此外,您的查询似乎有很多逻辑,您没有解释。要么把它拿出来,要么——如果它与问题相关——解释它:为什么是“外部”,“99年12月30日”,“INSTR…”+“。。。等等,由于内部政治原因,我不能透露细节。但是,不是真实的数据,而是测试数据,样本数据。完成后,也许你可以将其放入excel…输出中的数据在你的输入中没有出现,因此它对逻辑没有任何线索。同时,我对你的数据进行了格式化,使其在问题中显示良好。如果你更新,请考虑这种格式。我的查询很好,但我的问题是如何优化查询?对于一个小的数据库来说是可以的,但是对于大的数据库,比如我正在为一家银行工作,这一点都不好。我应该在“第一次选择”内进行连接吗?对不起,我只是个初学者,就像非常初学者一样,所以不要评判我。我也是这个网站的初学者。
select c.customer_no
, c.expired_date
from customers c
inner join customers_repres cr
on cr.representative_id = c.customer_no
left outer join accounts_iban ai
on ai.cust_key = c.customer_no
where c.expired_date is not null -- ?? indicates expired ID ??
and ai.cust_key is null
select * from STAGE_CORE.IFLEX_CUSTOMERS c
join
STAGE_CORE.IFLEX_CUSTOMERS_REPRES cr
on c.CUSTOMER_NO=cr.REPRESENTATIVE
left join STAGE_CORE.VW_IFLEX_ACCOUNTS_IBAN a
on a.cust_key=cr.REPRESENTATIVE
where cr.RELATIONSHIP<>'PRIMARY'
and a.CUST_KEY is not null