【问题标题】:Am I translating Ansi OUTER JOIN syntax correctly to older Sybase (*=) join syntax?我是否将 Ansi OUTER JOIN 语法正确地转换为较旧的 Sybase (*=) 连接语法?
【发布时间】:2010-11-02 14:17:46
【问题描述】:

假设这是 左外连接的正确 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

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

对吗?

【问题讨论】:

    标签: sql database sybase outer-join


    【解决方案1】:

    *= 等价于左外连接,而 ...=* 等价于右外连接(如您所料)

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

    【讨论】:

    • 文森特——星号出现了,我希望你不介意我用反斜杠编辑它们
    【解决方案2】:

    是的。但有时这两个在通过 where 处理结果集时可能会有些不同

    【讨论】:

      【解决方案3】:

      是的,没错

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2018-05-18
          • 1970-01-01
          • 1970-01-01
          • 2019-11-18
          • 1970-01-01
          • 1970-01-01
          • 2013-09-24
          • 1970-01-01
          • 2015-02-16
          相关资源
          最近更新 更多