ON 句で参照されるテーブルは、その ON 句が修飾するジョインの一部である必要があります。たとえば、次の構文は無効です。
FROM ( A KEY JOIN B ) JOIN ( C JOIN D ON A.x = C.x ) |
ここでの問題は、ジョイン条件 A.x = C.x
がテーブル A を参照していることです。テーブル A は、このジョイン条件が修飾するジョイン (この場合 C JOIN D
) の一部ではありません。
ただし、ANSI/ISO 標準の SQL99 と Adaptive Server Anywhere 7.0 については、この規則は適用されません。つまり、テーブル式の間にカンマを使用すれば、ジョインの ON 条件は、構文中にその ON 条件より前にある FROM 句内のテーブルを参照できます。このため、次の構文は有効になります。
FROM (A KEY JOIN B) , (C JOIN D ON A.x = C.x) |
カンマの詳細については、カンマを参照してください。
次の例では、SalesOrders テーブルを Employees テーブルにジョインします。結果の各ローは、SalesOrders テーブルの SalesRepresentative カラムの値と Employees テーブルの EmployeeID カラムの値が一致するローに対応しています。
SELECT Employees.Surname, SalesOrders.ID, SalesOrders.OrderDate FROM SalesOrders JOIN Employees ON SalesOrders.SalesRepresentative = Employees.EmployeeID; |
Surname | ID | OrderDate |
---|---|---|
Chin | 2008 | 4/2/2001 |
Chin | 2020 | 3/4/2001 |
Chin | 2032 | 7/5/2001 |
Chin | 2044 | 7/15/2000 |
Chin | 2056 | 4/15/2001 |
... | ... | ... |
次はこの例に関する説明です。
このクエリの結果に含まれているのは、648 個のロー (SalesOrders テーブルの各ローに対応) のみです。直積における 48,600 のローのうち、2 つのテーブルで同じ従業員番号を持っているのは 648 のローだけだからです。
結果の順序に意味はありません。ORDER BY 句を追加すると、クエリに特定の順序を指定できます。
ON 句によって、最終的な結果セットには含まれないカラムが組み込まれます。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |