2

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

4 回答 4

3

*=相当于一个左外连接和...=*到一个右外连接(正如你猜到的)

您可能有兴趣注意到*=*旧版本的 Sybase ASE 不支持 。Transact-SQL 外连接的语义和兼容性解释了原因 (PDF)

于 2009-06-12T20:35:05.790 回答
2

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

于 2012-03-28T07:23:29.053 回答
1

对,那是正确的

于 2009-06-12T20:30:54.987 回答
1

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

于 2009-06-12T20:49:27.580 回答