我是否正确地将Ansi OUTER JOIN语法转换为较旧的Sybase(* =)连接语法?

时间:2009-06-12 20:16:04

标签: sql database sybase outer-join

假设这是左外连接的正确 Ansi SQL语法:

SELECT *  
FROM   employee  LEFT OUTER JOIN department  
          ON employee.DepartmentID = department.DepartmentID

这是右外连接的正确 Ansi SQL语法:

SELECT * 
FROM   employee RIGHT OUTER JOIN department 
          ON employee.DepartmentID = department.DepartmentID

这是 Sybase 的旧版左外连接

SELECT * FROM employee, department
WHERE employee.DepartmentID *= department.DepartmentID

这是旧的 Sybase 相当于右外连接

SELECT * FROM employee, department
WHERE employee.DepartmentID =* department.DepartmentID

因此,我们将*放在等号的左侧,用于左外连接,在右侧用于右外连接。

这是对的吗?

4 个答案:

答案 0 :(得分:3)

*=相当于左外连接,而=*相当于右外连接(正如您猜测的那样)

您可能有兴趣注意,在旧版Sybase ASE中不支持*=*Semantics and compatibility of Transact-SQL outer joins解释了原因(PDF)

答案 1 :(得分:2)

是肯定的。但有时这两个在处理

的结果集时可能会略有不同

答案 2 :(得分:1)

是的,这是正确的

答案 3 :(得分:1)

为什么要从左连接转换为旧语法,您是否应该从旧语法转换为首选较新标准?我不知道Sybase,但由于SQl Server基于Sybase,我怀疑它可能有同样的问题,即旧语法并不总是正确地被解释为外连接。有时数据库可能会将其解释为交叉连接,因此通常我不建议使用它,除非您访问的是旧版本的数据库,因为新语法不可用。