2017-07-04 8 views
1

JOINを組み合わせて、どのようにより良い説明しますOracle- SQL:LEFTとINNERは、私にはわからない

を私は(非常に正規化された問題で)ビューを必要とし、対応するIDを名前に展開している、私は必要なように、 feを結合する左は、内側と結合すると、以下の事柄に参加する(例を参照)

テーブル:

TCUSTOMER 
ID|  NAME| ANIMAL| CAR| PROFESSION 
1| Sheldon|   | | 1 
2| Leonard|   | 1| 1 
3| Howard |   | 2| 2 
4| Radshesh|  1| | 1 
5| Penny |   | 3|  

TANIMAL  
ID|  NAME| TYPE 
1| CINNAMON| 1 

TANIMALTYPE 
ID| NAME 
1| DOG 

ID|  NAME| TYPE 
1| CAL-0123| 1 
2| CAL-2345| 1 
3| CAL-4567| 2 

TCARTYPE  
ID| NAME 
1| FORD 
2| BMW 

TPROFESSION 
1| PHYSICIAN 
2| ENGINEER 

と私は次のような結果と見る必要があります:私は

ようなものが必要だと思う

VCUSTOMER      
ID| NAME|ANIMALNAME| ANIMALTYPE| CARNAME|CARTYPE| PROFESSIONNAME 
1| Sheldon|   |   |  |  | PHYSICIAN 
2| Leonard|   |   |CAL-0123| FORD| PHYSICIAN 
3| Howard|   |   |CAL-2345| FORD| ENGINEER 
4|Radshesh| CINNAMON|  DOG|  |  | PHYSICIAN 
5| Penny|   |   |CAL-4567| BMW|  

SELECT 
    C.ID, C.NAME, 
    A.NAME, AT.NAME, 
    CAR.NAME, CART.NAME, 
    P.NAME 
FROM TCUSTOMER C  
LEFT (JOIN TANIMAL A INNER JOIN TANIMALTYPE AT ON A.TYPE = AT.ID) ON A.ID = C.ANIMAL  
LEFT (JOIN TCAR CAR INNER JOIN TCARTYPE CART ON CAR.TYPE = CARTT.ID) ON CAR.ID = C.CAR 
LEFT JOIN TPROFESSION P ON P.ID = C.PROFESSION 

これを行う方法または検索する必要があるものはありますか? 「ネストされたOracleが参加し、」あなたは、ほぼ右のそれをやっている事前

+0

美しいテキストありがとうございました。 – am2

答えて

1

おかげで動作しませんでした - それはちょうど複数を結合します。

プレイスブラケットのうちJOINキーワード:JOIN sは左から右に実行される(ただし、括弧の前に)されていること

SELECT 
    C.ID, C.NAME, 
    A.NAME, AT.NAME, 
    CAR.NAME, CART.NAME, 
    P.NAME 
FROM TCUSTOMER C  
LEFT JOIN (TANIMAL A INNER JOIN TANIMALTYPE AT ON A.TYPE = AT.ID) ON A.ID = C.ANIMAL  
LEFT JOIN (TCAR CAR INNER JOIN TCARTYPE CART ON CAR.TYPE = CART.ID) ON CAR.ID = C.CAR 
LEFT JOIN TPROFESSION P ON P.ID = C.PROFESSION 

注意。あなたのケースであるため、の順番参加するには、次のようになります。

<->は(内部結合)対称の関係(値は側面の両方に存在する場合にのみ表示されます)と ->(左結合)手段を意味
{[C -> (A <-> AT)] -> (CAR <-> CART)} -> P 

左からのすべての値が表示され、右からは、マッチングのみが表示されます。

+1

速い答えをありがとう、それは正常に動作します。時には物事が予想よりも理解しやすい... – am2

関連する問題