自己結合では、同じテーブルの別の行から選択された関連するデータが組み合わせされ、1行が返されます。FROM句を使用して定義された一時テーブルの名前は、同じテーブルの列の別の参照となります。
以下のテーブルは、自己結合処理における列参照の影響を一覧にしています。これらのルールは、単一の別名付きFROM句がある場合にだけ適用されます。
参照される列 | 参照の種類 | 自己結合 |
---|---|---|
All | 修飾されていない(列名の前に付くテーブル名または相関名がない)場合 | 自己結合は行なわれません。 |
修飾されている(しかし、修飾子が相関名だけを参照している)場合 | ||
一部ですが、すべてではありません。 | 修飾され、修飾子が相関名だけを参照している場合 | |
修飾され、修飾子がテーブルだけを参照する場合 | 修飾されていない列の所有者についての仮定条件がないため、自己結合は未決定です。自己結合は行なわれません。 |
FROM句が永久テーブル名と相関名の両方を参照するときに、自己結合が実行されるかどうかは、列参照の修飾方法によります。
自己結合操作を成功させるためには、列参照は、完全に修飾されていなければならず(すなわち、table_name.column_nameの形式で指定されている)、修飾子には、永久テーブル名と相関テーブル名が含まれていなければなりません。
相関名が指定されると、以後の基本テーブル名への参照により、使用されるテーブルの新しいインスタンスが生じます。SELECTの結果は、直積の自己結合となります。
例: 自己結合に使用されるFROM句を参照してください。ここでtable_1に相関名tが指定されます。それに続くWHERE句でtable_1を指定することで、文は直積を実行します。
SELECT * FROM table_1 AS t WHERE table_1.column_1 = 2;