Conversion from Oracle to ANSI outer join

此生再无相见时 提交于 2019-12-13 07:12:46

问题


I have to rewrite a lot of SQL queries with Oracle outer join notation (+) to ANSI SQL. I read something about Oracle syntax but there were very easy examples. How should look this query in ANSI notation?

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

or

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

回答1:


In a first query you have alias r, my guess it is r2.

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

if r2.id is not part of a join:

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

and (my guess m.status is not part of a join)

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:


First query (assuming that by r.ID you meant r2.ID):

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

Second query:

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

Share and enjoy.



来源:https://stackoverflow.com/questions/23762963/conversion-from-oracle-to-ansi-outer-join

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!