我试图将Oracle JOIN查询转换为Aurora MySQL,但获得(+)操作符的语法问题。能否提供一些建议或提供正确的语法查询。
我的Oracle查询的连接如下:
select ...
from table1 A, table2 B
WHERE A.PLACE_TYP_CD = 'AREA'
AND A.EFF_DT <= SYSDATE
AND A.EXP_DT >= SYSDATE
AND A.PLACE_ID = B.CHILD_LOCN_ID(+)
AND B.LINK_REASON_TYP(+) = 'CONTAINS'
AND B.EFF_DT(+) <= SYSDATE
AND B.EXP_DT(+) >= SYSDATE
A和B是表名的别名。
我得到错误提示:
数据库错误码:1064。消息:你有一个错误在你的SQL语法;查看对应于MySQL服务器版本的手册,以获得正确的语法来使用near ') AND B.LINK_REASON_TYP(+) = 'CONTAINS' AND B.EFF_DT(+) <= SYSDATE AND B.E' at line…
谢谢。
(+)
是Oracle的旧的用于执行外部连接的专有语法。SQL 99标准引入了一个指定外部连接的标准,在过去的15年里编写的任何东西都应该使用这个标准。
这应该可以在任何最近的Oracle版本中工作。
select ...
from table1 A
left outer join table2 B
on( A.PLACE_ID = B.CHILD_LOCN_ID
AND B.LINK_REASON_TYP = 'CONTAINS'
AND B.EFF_DT <= SYSDATE
AND B.EXP_DT >= SYSDATE )
WHERE A.PLACE_TYP_CD = 'AREA'
AND A.EFF_DT <= SYSDATE
AND A.EXP_DT >= SYSDATE
如果你正在转换到MySQL,你想要用current_timestamp
或current_date
替换sysdate
取决于你是如何将列数据类型从Oracle转换到MySQL。