0

在将网站从 oracle server 迁移到 sql server 时。我们坚持使用以下类型的查询。我们有几个这样的表和连接。例如,如下所示

Select * 
from Job_master J,
     Batch_master B 
where J.BUS_DATE (+)= B.BUS_DATE

.除了将所有查询转换为使用右外连接或左外连接外,我们还有其他解决方案吗?

4

3 回答 3

1

对于右外连接

    Select * 
    from Job_master J
        Right Outer Join
         Batch_master B 
         On J.BUS_DATE = B.BUS_DATE

对于左外连接

    Select * 
    from Job_master J
        Left Outer Join
         Batch_master B 
         On J.BUS_DATE = B.BUS_DATE

对于内连接

    Select * 
    from Job_master J
        Inner Join
         Batch_master B 
         On J.BUS_DATE = B.BUS_DATE
于 2013-06-19T10:35:30.170 回答
1

您可以使用与上述类似的命令

Select * from Job_master J right outer join Batch_master B
 on J.BUS_DATE = B.BUS_DATE
于 2013-06-19T10:27:43.890 回答
0

只有在使用兼容级别 80 (SQL 2000) 时,才能编写非 ANSI 外连接。SQL Server 2008R2 中的相同语法是:

select *
from dbo.Address ad, dbo.Street st
where st.Id *= ad.StreetId

(将 (+) 转换为 *)

如果您在没有兼容级别 80 的数据库中运行它,那么您会收到一条很好的错误消息,表明这是不可能的:

消息 4147,级别 15,状态 1,第 4 行查询使用非 ANSI 外连接运算符(“ =”或“= ”)。要在不修改的情况下运行此查询,请使用 ALTER DATABASE 的 SET COMPATIBILITY_LEVEL 选项将当前数据库的兼容级别设置为 80。强烈建议使用 ANSI 外连接运算符(LEFT OUTER JOIN、RIGHT OUTER JOIN)重写查询。在 SQL Server 的未来版本中,即使在向后兼容模式下也不支持非 ANSI 连接运算符。

但是,虽然它可能是可行的,但根本不建议使用它(它是模棱两可且已弃用的)。请阅读评论中提到的另一个问题,耶利米对此有很好的回答。

于 2013-06-19T10:50:18.310 回答