![]() 前へ |
![]() 次へ |
複数の条件が含まれる3つ以上の表の結合を作成する場合、どの条件をグループ化するか明確に示す必要があります。
複数の条件が含まれる結合を定義する際は、次のガイドラインに従います。
組み合せて1つの条件にする句を結合条件で指定するには、丸カッコを使用します。
たとえば、A.ID = B.ID AND (B.ID (+) = C.ID (+) AND B.ID > 10)のようになります。
Warehouse Builderではこの結合条件に対して次のコードが生成されます。
SELECT ...
FROM
"A" "A"
JOIN "B" "B" ON ( ( "A"."ID" = "B"."ID" ) )
FULL OUTER JOIN "C" "C" ON ( ( "B"."ID" = "C"."ID" and "B"."ID" > 10 )/*
OPERATOR JOINER JOIN CONDITION */ )
丸カッコを省略すると、次のコードが生成されます。
SELECT ...
FROM
"A" "A"
JOIN "B" "B" ON ( ( "A"."ID" = "B"."ID" ) )
FULL OUTER JOIN "C" "C" ON ( "B"."ID" = "C"."ID" ) WHERE
( "B"."ID" > 10 )
最後の句のB.ID (+) > 10は、どの結合条件にも含まれていませんがWHERE句として扱われています。
結合の要素として条件をマーキングするには、外部結合条件記号(+)を使用します。
たとえば、結合条件をA.ID = B.ID AND B.ID (+) = C.ID (+) AND B.ID (+) > 10のように設定すると、次のコードが生成されます。
SELECT ...
FROM
"A" "A"
JOIN ( SELECT
/* B.INOUTGRP1 */
"B"."ID" "ID",
"B"."NAME" "NAME",
"B"."ATTR" "ATTR"
FROM
"B" "B" ) "B" ON ( ( ( "A"."ID" = "B"."ID" ) ) AND ( ( "B"."ID" > 10 ) ) )
FULL OUTER JOIN "C" "C" ON ( "B"."ID" = "C"."ID" )
このケースでは丸カッコが使用されていないため、単一条件のB.ID (+) > 10が最初のON句に移動されます。
コード・テンプレート・マッピングでは、前述のガイドラインのどちらにも従っていないと、検証の警告が表示されて次のいずれかの処理が実行されます。
最後に記述された条件をその直前の条件と組み合せられない場合は、最後の条件がWHERE句に移動されます。
たとえば、C.ENAME = A.ENAME AND A.DEPTNO = B.DEPTNO AND C.SAL (+) > 1000という条件を想定します。C.SAL (+) > 1000という条件は、C.ENAME = A.ENAMEと組み合せられます。しかし、配置とその組合せは一致しないため、検証の警告が表示されます。
最後に記述された条件をその直前の条件と組み合せられる場合は、組合せグループ条件が形成されます。
たとえば、A.DEPTNO = B.DEPTNO AND C.ENAME = A.ENAME AND C.SAL (+) > 1000という条件を想定します。C.SAL (+) > 1000という条件は、C.ENAME = A.ENAMEと組み合せられます。したがって、C.ENAME = A.ENAME AND C.SAL (+) > 1000という組合せ条件の要素として含まれます。
|
注意: ジョイナ入力ロールを外部結合に設定する場合や、(マッピング構成プロパティの「ANSI SQL構文」を「True」に設定することで)ASCI構文を使用してジョイナ演算子が含まれるマッピングを生成する場合は、生成されたコードを検証して、指定したとおりに条件がグループ化されているか確認してください。あいまいな条件が原因で、指定とは異なるように条件がグループ化される場合があります。かわりに、「ANSI SQL構文」プロパティを「False」に設定することもできます。この設定によって、「結合条件」プロパティで指定したとおりに また、それぞれ2グループを含む結合演算子がネストされたものが含まれるように、マッピングを構成することもできます。この構成では、結合条件の定義にあいまいな所があれば必ず排除できます。 |