Oracle-具有不相等条件的联接

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

我想将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      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