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 的用法 » 查询和修改数据 » 连接:从多个表检索数据 » 显式连接条件(ON 子句)

 

在 ON 子句中引用表

在 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 条件可以引用 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 行中,只有其中的 648 行在两个表中具有相同的雇员编号。

  • 结果的排序没有任何意义。您可以添加一个 ORDER BY 子句对查询强制特定的顺序。

  • ON 子句包含没有在最终结果集中显示的列。