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

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询和修改数据 » 连接:从多个表检索数据 » 键连接 » 表的表达式的键连接

 

表的表达式列表和不包含逗号的表的表达式的键连接

当表表达式列表通过键连接与不包含逗号的表表达式连接时,SQL Anywhere 为表表达式列表中的每个表生成一个连接条件。

例如,以下语句是一个表表达式列表与一个不包含逗号的表表达式的键连接。本示例为表 A 和表表达式 C NATURAL JOIN D 以及表 B 和表表达式 C NATURAL JOIN D 生成一个连接条件。

SELECT *
FROM (A,B) KEY JOIN (C NATURAL JOIN D);

(A,B) 是表表达式列表,C NATURAL JOIN D 是表表达式。因此,SQL Anywhere 必须生成两个连接条件:它为 A-C 和 A-D 对生成一个连接条件,为 B-C 和 B-D 对生成第二个连接条件。它根据存在多个外键关系时的键连接规则生成连接条件:

  • 对于每组表对,SQL Anywhere 查找其角色名与其中一个主键表的相关名同名的外键。如果正好只有一个外键满足此条件,则使用此外键。如果有多个,则认为该连接是不明确的,并且发出错误消息。

  • 对于每组表对,如果不存在其角色名与主键表的相关名同名的外键,则 SQL Anywhere 查找这些表间的任何外键关系。如果恰好有一个外键关系,则连接条件使用此关系。如果有多个,则认为该连接是不明确的,并且发出错误消息。

  • 对于每组对,如果没有任何外键关系,则发出错误消息。

  • 如果 SQL Anywhere 能够为每一组表对确定恰好一个连接条件,则它将使用关键字 AND 来组合这些连接条件。

 示例 1
 示例 2