When table expression lists are joined via key join with table expressions that do not contain commas, SQL Anywhere generates a join condition for each table in the table expression list.
For example, the following statement is the key join of a table expression list with a table expression that does not contain
commas. This example generates a join condition for table A with table expression
C NATURAL JOIN D, and for table B with table expression
C NATURAL JOIN D.
SELECT * FROM (A,B) KEY JOIN (C NATURAL JOIN D);
(A,B) is a list of table expressions and
C NATURAL JOIN D is a table expression. SQL Anywhere must therefore generate two join conditions: it generates one join condition for the
pairs A-C and A-D, and a second join condition for the pairs B-C and B-D. It does so according to the rules for key joins
when there are multiple foreign key relationships:
For each set of table-pairs, SQL Anywhere looks for a foreign key that has the same role name as the correlation name of one of the primary key tables. If there is exactly one foreign key meeting this criterion, it uses it. If there is more than one, the join is ambiguous and an error is issued.
For each set of table-pairs, if there is no foreign key with the same name as the correlation name of a table, SQL Anywhere looks for any foreign key relationship between the tables. If there is exactly one relationship, it uses it. If there is more than one, the join is ambiguous and an error is issued.
For each set of pairs, if there is no foreign key relationship, an error is issued.
If SQL Anywhere is able to determine exactly one join condition for each set of pairs, it combines the join conditions with the keyword AND.
Discuss this page in DocCommentXchange.
|Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1|