2017-08-03 64 views
0

我是新来的Oracle子查询,我碰到这样的子查询:表名的子查询后,JOIN

select CUSTOMER.CUSTOMER_ID, CUSTOMER.CUSTOMER_RCE_ID, CUSTOMER.COMM_REGNUM_CUST,CUSTOMER.GROUP_CODE, CUSTOMER.CUSTOMER_CORPORATE_NAME, 
Replace(CUSTOMER.ADDRESS_COMPANY, '|', ', ') as ADDRESS_COMPANY, CUSTOMER.COUNTRY_CODE, CUSTOMER.POST_CODE, CUSTOMER.CITY, CUSTOMER.CUSTOMER_ATTRIBUTE1, 
CUSTOMER.CUSTOMER_ATTRIBUTE2, CUSTOMER.CUSTOMER_ATTRIBUTE3, CUSTOMER.CUSTOMER_ATTRIBUTE4, CUSTOMER.CUSTOMER_ATTRIBUTE5, 
CUSTOMER.CREATED_DATE, CUSTOMER.CREATED_BY,CUSTOMER.UPDATED_DATE, CUSTOMER.UPDATED_BY, CUSTOMER.TENANT_ID, 
CUSTOMER.CUSTOMER_ACCOUNT, CUSTOMER.VAT_INTRA, CUSTOMER.VAT_SETTLEMENT,CUSTOMER.IS_HEADQUARTERS, CUSTOMER.CUSTOMER_SAP_ID, 
CUSTOMER.ADDRESSGUID, CUSTOMER.SIREN_CORP, CUSTOMER.COMMERCIAL_SEGMENT, CUSTOMER.CODE_NAF, CUSTOMER.JUR_STATUS_COMP, 
CUSTOMER.SHARE_CAP_AMT,CUSTOMER.IS_ACTIVE_RCE, CUSTOMER.REGISTRATION_PLACE,STATUS.STATUS_NAME , 
CUSTOMER.RCE_ETAB_ID, REPLACE (CUSTOMER.COMM_REGNUM_CUST,' ','') AS SIRET from CUSTOMER 

join CUSTOMER_STATUS on CUSTOMER_STATUS.CUSTOMER_STATUS_ID = (
select * from (select CUSTOMER_STATUS_ID from CUSTOMER_STATUS 
where CUSTOMER.CUSTOMER_ID = CUSTOMER_STATUS.CUSTOMER_ID order by CUSTOMER_STATUS.UPDATED_DATE desc) CUSTOMER_STATUS where rownum = 1) 

我不明白这个部分:

select * from (select CUSTOMER_STATUS_ID from CUSTOMER_STATUS 
where CUSTOMER.CUSTOMER_ID = CUSTOMER_STATUS.CUSTOMER_ID order by CUSTOMER_STATUS.UPDATED_DATE desc) CUSTOMER_STATUS where rownum = 1 

如何在子查询后放置CUSTOMER_STATUS?为什么?

在此先感谢。

+1

Customer_Status是一个表别名。每个内嵌视图应该包含一个别名,以便如果查询中的列与其他表中的列命名相同,则引擎可以区分列。在这种情况下,它与连接中的表名称相同,我认为使用与表相同的别名是不好的,但由于它在子查询中处于不同级别,所以两者不会发生冲突。 – xQbert

+0

在这种情况下有点令人困惑,因为表别名从来没有被实际使用过。它可以被删除,查询将正常工作。 – kfinity

+0

我有点困惑,customer_Status似乎没有别名,因为状态在选择Status.status_name中被尊崇,但也许有一张名为状态的表... – xQbert

回答

0

这是一个...有趣的加入。关闭括号后的Customer_Status是一个表别名。你可以很容易地用sadfkjhasldkgjh代替它,它会工作得很好。它告诉程序你已经选择了表格结构中的数据,然后你将通过这个名称(别名)来引用它。它使您更容易使用。

在这种情况下,整个陈述有点复杂。您显然已经拥有一个名为CUSTOMER_STATUS的表,并且您将子查询别名为相同的名称。甲骨文会让你这样做,但结果很快就会令人困惑,难以追踪。最佳做法是,不要将子查询与现有表同名。