次の Core Data Service ビュー エンティティ データ定義があるとします。 1 @AccessControl.authorizationCheck: #NOT_REQUIRED 2 ビューエンティティの定義 demo_flight_info_join 3 AS SELECT 4 傷跡から 5 左外部結合 scounter AS c 6 左外部結合 sairport AS p 7 ON p.id = c.airport 8 ON a.carrid = c.carrid 9 { 10 a.carrid AS キャリアID、 11 p.id AS 空港ID、 12 c.countnum AS カウンター番号 13 } 結合ステートメントはどのような順序で実行されますか?
正解:A
結合ステートメントが実行される順序は次のとおりです。 最初に scarr が scounter と結合され、その結果が sairport と結合されます。 これは、結合ステートメントが左から右にネストされているためです。つまり、左端のデータ ソースが次のデータ ソースと結合され、その結果がさらに次のデータ ソースと結合され、これが繰り返されます。各データ ソース ペアの結合条件は、データ ソース名に続く ON 句によって指定されます。各データ ソース ペアの結合タイプは、データ ソース名の前にある結合演算子によって指定されます。この場合、結合演算子は LEFT OUTER JOIN です。つまり、結果には左側のデータ ソースのすべての行が含まれ、右側のデータ ソースの一致する行のみが含まれます。右側のデータ ソースに一致する行がない場合、対応するフィールドには初期値1 が入力されます。 したがって、結合ステートメントは次のように実行されます。 まず、結合条件 a.carrid = c.carrid を使用して、scarr AS a を scounter AS c と結合します。つまり、scarr のすべての行が結果に含まれ、scounter の行のうち carrid フィールドの値が同じ行のみが含まれます。scounter に一致する行がない場合、countnum フィールドには初期値が設定されます。 次に、最初の結合の結果が、結合条件 p.id = c.airport を使用して sairport AS p と結合されます。つまり、最初の結合のすべての行が結果に含まれ、最初の結合の airport フィールドと同じ id フィールド値を持つ sairport の行のみが含まれます。sairport に一致する行がない場合、id フィールドには初期値が設定されます。