2013-04-08 6 views

答えて

10

TABLE C will left join into 1. (TABLE B) or 2. (data from TABLE A LEFT JOIN TABLE B) or 3. (TABLE A)?

第2です。しかし、ジョインコードはあなたがもっと理解するのを助けます。

SELECT * 
FROM Table A 
LEFT JOIN TABLE B ON (A.id = B.id) 
LEFT JOIN TABLE C ON (A.ID = C.ID) 

しかし、あなたがすることができます::

あなたは書くことができます

SELECT * 
FROM Table A 
LEFT JOIN TABLE B ON (A.id = B.id) 
LEFT JOIN TABLE C ON (A.id = C.id and B.code = C.code) 

だから、あなたは前のテーブルのすべてのフィールドに参加することができますし、ものの(「結果」に参加しますエンジンは、前の結合の結果を得る方法を選択することができます)。

左のジョイントは非強制的な操作であると考えてください(A left join BB left jon Aと同じではありません)。したがって、順序は重要で、前のジョインされたテーブルでは結合されたままになります。これは、参加すると、他の言葉で(ANSI規格と一致しているの取り扱いに、論理的なアプローチがある

To execute a join of three or more tables, Oracle first joins two of the tables based on the join conditions comparing their columns and then joins the result to another table based on join conditions containing columns of the joined tables and the new table. Oracle continues this process until all tables are joined into the result.

、すべてのデータベース・エンジン・プロセスは、インクルード・ジョイン:

4

Oracle documentationが処理されている加入方法については、非常に具体的です順番に)。

ただし、クエリが実際にで実行されている場合、オプティマイザは異なる順序で結合を実行することがあります。結果は、クエリで指定された順序で結合を処理するのと論理的に同じである必要があります。

また、結合条件によって予期しない条件が発生することがあります。あなたが持っているのであれば:

from A left outer join 
    B 
    on A.id = B.id left outer join 
    C 
    on B.id = C.id 

を次に、あなたはACそれぞれが特定のIDを持つ行を持っていますが、Bない条件がある場合があります。この式では、NULLに結合しているため、行はCには表示されません。したがって、left outer joinの結合条件に注意してください。特にチェーン内の最初のテーブル以外のテーブルに結合する場合は注意してください。

+0

遅いノート:これのバリエーションは、指定された結合からの推論によって、述語のセットがファクトテーブルに適用される「スター変換」ですディメンション表に追加し、ディメンションに再び結合する前にディメンション表に適用します。 –

1

クエリを実行するには、列名を正しく記述する必要があります。だから、あなたが試すことができ、それを避けるために

ORA-00933:SQL command not properly ended.

SELECT * 
FROM Table A 
LEFT JOIN TABLE B ON (A.id = B.id) 
LEFT JOIN TABLE C ON (A.id = C.id and B.code = C.code) 

を次にあなたが次のエラーを取得することがあります。Let'sは、使用している場合は言う

おかげ

関連する問題