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

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

 

描述键连接的操作的规则

以下规则总结前面提供的信息。

规则 1:两个表的键连接

此规则适用于 A KEY JOIN B,其中 A 和 B 是基表或临时表。

  1. 从 A 中查找所有引用 B 的外键。

    如果存在其角色名是表 B 的相关名的外键,则将它标记为首选外键。

  2. 从 B 中查找所有引用 A 的外键。

    如果存在其角色名是表 A 的相关名的外键,则将它标记为首选外键。

  3. 如果有多个首选键,则连接是不明确的。发出语法错误 SQLE_AMBIGUOUS_JOIN (-147)

  4. 如果有单个首选键,则选择此外键为此 KEY JOIN 表达式定义生成的连接条件。

  5. 如果没有首选键,则使用 A 和 B 间的其它外键:

    • 如果在 A 和 B 间有多个外键,则连接是不明确的。发出语法错误 SQLE_AMBIGUOUS_JOIN (-147)

    • 如果有单个外键,则选择此外键为此 KEY JOIN 表达式定义生成的连接条件。

    • 如果没有任何外键,则该连接是无效的,将生成错误。

规则 2:不包含逗号的表表达式的键连接

此规则适用于 A KEY JOIN B,其中 A 和 B 是不包含逗号的表表达式。

  1. 针对来自表达式 A 和表达式 B 的每对表,列出所有外键,并且标记这些表间的所有首选外键。用于确定首选外键的规则在前面的规则 1 中提供。

  2. 如果有多个首选键,则连接是不明确的。发出语法错误 SQLE_AMBIGUOUS_JOIN (-147)

  3. 如果有单个首选键,则选择此外键为此 KEY JOIN 表达式定义生成的连接条件。

  4. 如果没有首选键,则使用表对间的其它外键:

    • 如果有多个外键,则该连接是不明确的。发出语法错误 SQLE_AMBIGUOUS_JOIN (-147)

    • 如果有单个外键,则选择此外键为此 KEY JOIN 表达式定义生成的连接条件。

    • 如果没有任何外键,则该连接是无效的,将生成错误。

规则 3:表的表达式列表的键连接

此规则适用于 (A1, A2, ...) KEY JOIN ( B1, B2, ...),其中 A1、B1 等是不包含逗号的表表达式。

  1. 对于每一对表表达式 Ai 和 Bj,通过应用规则 1 或 2 为表表达式 (Ai KEY JOIN Bj) 找到唯一生成的连接条件。如果按规则 1 或规则 2 确定任何一对表表达式的 KEY JOIN 是不明确的,则生成语法错误。

  2. 用于此 KEY JOIN 表达式的生成的连接条件是在第 1 步中找到的连接条件的联合。

规则 4:表的表达式列表和不包含逗号的表的表达式的键连接

此规则适用于 (A1, A2, ...) KEY JOIN ( B1, B2, ...),其中 A1、B1 等是包含逗号的表表达式。

  1. 对于每一对表表达式 Ai 和 Bj,通过应用规则 1、2 或 3 为表表达式 (Ai KEY JOIN Bj) 找到唯一生成的连接条件。如果按规则 1、2 或 3 确定任何一对表表达式的 KEY JOIN 是不明确的,则生成语法错误。

  2. 用于此 KEY JOIN 表达式的生成的连接条件是在第 1 步中找到的连接条件的联合。