Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー SQL の使用法 » データの問い合わせと修正 » ジョイン:複数テーブルからのデータ検索 » 特殊なジョイン

 

ジョインで重複する相関名 (スタージョイン)

重複するテーブル名は、「スタージョイン」を作成するために使用します。スタージョインでは、1 つのテーブルまたはビューが複数のテーブルやビューにジョインされます。

スタージョインを作成するには、同じテーブル名、ビュー名、または相関名を FROM 句内で 2 回以上使用します。これは、ANSI/ISO SQL 標準の拡張機能です。重複名を使用しても機能は追加されませんが、使用すると特定のクエリを簡単に作成できます。

重複名は、構文が意味をなすように、必ず異なるジョイン内に置きます。同一ジョイン内でテーブル名やビュー名を 2 回使用すると、2 番目のインスタンスは無視されます。たとえば、FROM A,AFROM A CROSS JOIN A は、どちらも FROM A と解釈されます。

次の例は SQL Anywhere で有効です。A、B、C はテーブルです。この例では、テーブル A の同一インスタンスは B と C のどちらにもジョインされます。スタージョインでジョインを分けるときにはカンマが必要です。スタージョインでのカンマの使用方法は、スタージョインの構文特有のものです。

SELECT *
FROM A LEFT OUTER JOIN B ON A.x = B.x,
     A LEFT OUTER JOIN C ON A.y = C.y;

これは、次の例と同義です。

SELECT *
FROM A LEFT OUTER JOIN B ON A.x = B.x,
     C RIGHT OUTER JOIN A ON A.y = C.y;

2 つの例はどちらも次の ANSI/ISO 標準構文と同義です (カッコはオプションです)。

SELECT *
FROM (A LEFT OUTER JOIN B ON A.x = B.x)
LEFT OUTER JOIN C ON A.y = C.y;

次の例では、テーブル A が 3 つのテーブル B、C、D にジョインされます。

SELECT *
FROM A JOIN B ON A.x = B.x,
     A JOIN C ON A.y = C.y,
     A JOIN D ON A.w = D.w;

上の例は、次の ANSI/ISO 標準構文と同義です (カッコはオプションです)。

SELECT *
FROM ((A JOIN B ON A.x = B.x)
JOIN C ON A.y = C.y)
JOIN D ON A.w = D.w;

複雑なジョインは図にするとわかりやすくなります。前述の例は次の図で説明できます。この図から、テーブル B、C、D がテーブル A を介してジョインされることがわかります。

テーブル A が中心にあり、テーブル B、C、D がそれぞれテーブル A につながっています。
注意

重複するテーブル名を使用できるのは、extended_join_syntax オプションが On (デフォルト) になっている場合だけです。

-

 例 1
 例 2
 参照