2016-07-15 53 views
1

我想轉換sql oracle select來訪問select查詢。 你能解釋一下這個「(+)」是什麼意思?這就像加入?如何在這種情況下使用「不在」?從oracle SQL轉換到訪問語法查詢

Select 
lc.LOC, lc.HOME_ZONE, hz.AREA_TYPE, ld.QTY, sk.SKU 

From 
LOC lc, HOMEZONE hz, CONTAINER cn, LOAD ld, SKU sk 

Where 
lc.HOME_ZONE = hz.HOME_ZONE 
and lc.LOC = cn.LOC (+) 
and cn.CONT_NO = ld.CONT_NO (+) 
and ld.PROD_NO = sk.PROD_NO (+) 
and lc.LOC_COLOR_ZONE in ('80', '90', '95', '100') 
and hz.AREA_TYPE in ('211', '231') 
and hz.SECTION_NO not in ('990000'); 

回答

3

(+)是用於外連接的Oracle快捷方式;例如以下兩個查詢是等同的:

SELECT * 
    FROM tableA, tableB 
WHERE tableA.idA = tableB.idB(+)   

SELECT * 
    FROM tableA 
     LEFT OUTER JOIN tableB 
     ON (tableA.idA = tableB.idB) 

你的查詢可以在ANSI SQL重寫這樣的:

SELECT lc.LOC, 
     lc.HOME_ZONE, 
     hz.AREA_TYPE, 
     ld.QTY, 
     sk.SKU 
    FROM LOC lc 
     INNER JOIN HOMEZONE hz USING (HOME_ZONE) 
     LEFT OUTER JOIN CONTAINER cn USING (LOC) 
     LEFT OUTER JOIN LOAD ld USING (CONT_NO) 
     LEFT OUTER JOIN SKU sk USING (PROD_NO) 
WHERE  lc.LOC_COLOR_ZONE IN ('80', '90', '95', '100') 
     AND hz.AREA_TYPE IN ('211', '231') 
     AND hz.SECTION_NO NOT IN ('990000');