【问题标题】:Conversion from Oracle to ANSI outer join从 Oracle 转换为 ANSI 外连接
【发布时间】:2014-07-08 21:38:39
【问题描述】:

我必须将大量使用 Oracle 外连接表示法 (+) 的 SQL 查询重写为 ANSI SQL。我读了一些关于 Oracle 语法的东西,但是有一些非常简单的例子。用 ANSI 表示法应该如何看待这个查询?

SELECT * FROM realtion r1, relation r2 WHERE r1.relno=r2.relno(+) AND r.id(+)=10

SELECT * FROM Mail M, Code C, Relation R WHERE M.STATUS = 2 AND C.id = M.usrID AND r.relo(+) = m.item AND R.item(+) = m.att

【问题讨论】:

  • 第一个查询似乎写错了 - 你有 r.id(+) = 10 但没有别名为 'r' 的表。

标签: sql oracle outer-join ansi-sql


【解决方案1】:

在第一个查询中,您有别名 r,我猜它是 r2。

SELECT * FROM realtion r1 
left join relation r2 on r1.relno=r2.relno AND r2.id=10

如果 r2.id 不是连接的一部分:

SELECT * FROM realtion r1 
left join relation r2 on r1.relno=r2.relno 
WHERE r2.id=10 or r2.id is null

并且(我猜 m.status 不是连接的一部分)

SELECT * FROM Mail M 
inner join Code C on m.usrID = c.id 
left join Relation R on m.item = r.relo and m.att = r.item 
WHERE M.STATUS = 2 

【讨论】:

    【解决方案2】:

    第一个查询(假设 r.ID 你的意思是 r2.ID):

    SELECT *
      FROM realtion r1
      LEFT OUTER JOIN relation r2 
        ON r2.relno = r1.relno AND
           r2.id = 10
    

    第二次查询:

    SELECT *
      FROM Mail M
      INNER JOIN Code C
        ON C.id = M.usrID
      LEFT OUTER JOIN Relation R 
        ON r.relo = m.item AND
           R.item = m.att
      WHERE M.STATUS = 2
    

    分享和享受。

    【讨论】:

      猜你喜欢
      • 2017-04-08
      • 2017-03-15
      • 1970-01-01
      • 2021-11-15
      • 2015-11-06
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多