| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> Does "Nested Loops" not always join on a join key?
Hello
I have a select statement that used five tables. I have tried to draw their relationship here:
/ \
DT_INFO -<- FUND_SHR_PRPTY ->- FUND_SHR
\ / |
|
|
\ /|\
FUND_SHR_SET->--FUND_SHR_LIST
/
(one row of DT_INFO joins to zero, one, or more of FUND_SHR_PRPTY, and so on)
The statement looks like this:
SELECT
FUND_SHR_LIST.ORDER_SEQ, FUND_SHR_PRPTY.NAV_DT, FUND_SHR.SEC_NUM, FUND_SHR.SHR_NM, FUND_SHR_PRPTY.CCY_CD_516
FUND_SHR_LIST, FUND_SHR_PRPTY, FUND_SHR, FUND_SHR_SET,
FUND_SHR_SET.FUND_SHR_SET_ID = FUND_SHR_LIST.FUND_SHR_SET_ID
AND FUND_SHR_PRPTY.NAV_DT = DT_INFO.LAST_NAV_DT
AND FUND_SHR_PRPTY.FUND_SHR_ID = FUND_SHR.FUND_SHR_ID
AND FUND_SHR.FUND_SHR_ID = FUND_SHR_LIST.FUND_SHR_ID
AND FUND_SHR_SET.FUND_SHR_SET_NM = 'Cyclon (alle WF inkl. Immo)'
AND DT_INFO.DT = to_date('23.07.2002','dd.mm.yyyy')
ORDER BY
And the Execution plan is:
SELECT STATEMENT []
SORT [ORDER BY]
NESTED LOOPS []
NESTED LOOPS []
NESTED LOOPS []
NESTED LOOPS []
TABLE ACCESS [BY INDEX ROWID] DT_INFO <==== Here
INDEX [UNIQUE SCAN] SYS_C004592
TABLE ACCESS [BY INDEX ROWID] FUND_SHR_SET <==== and Here
INDEX [UNIQUE SCAN] IX_FUND_SHR_SET
TABLE ACCESS [BY INDEX ROWID] FUND_SHR_LIST
INDEX [RANGE SCAN] SYS_C004617
TABLE ACCESS [BY INDEX ROWID] FUND_SHR
INDEX [UNIQUE SCAN] PK_FUND_SHR
TABLE ACCESS [BY INDEX ROWID] FUND_SHR_PRPTY
INDEX [RANGE SCAN] IX_FUND_SHR_PRPTY_FUND_SHR_ID
Now, I have problems understanding how Oracle gets the data. From how I understand, Oracle starts where the execution plan is intented most (<==== Here, <=== and Here, respectively). The Nested Loop above indicates, that Oracle joins DT_INFO and FUND_SHR_SET. But here's my problem: how can Oracle join these table: the don't have a join key in common.
The Version is 8.1.7 on Solaris.
Can anyone please give me any hint?
Thanks
MK
Received on Mon Aug 05 2002 - 12:54:33 CDT
![]() |
![]() |