2016-07-15 5 views
1

SQLのoracle selectをselect select queryに変換しようとしています。 「(+)」とはどういう意味ですか?それは結合のようなものですか?この場合、どのように "not in"を使うことができますか?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ショートカットです。例えば、以下の2つのクエリは同等です:

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'); 
関連する問題