【问题标题】:Oracle query to Aurora MySQL 5.7Oracle 查询 Aurora MySQL 5.7
【发布时间】:2021-10-22 09:36:40
【问题描述】:

我正在尝试将 Oracle JOIN 查询转换为 Aurora MySQL,但遇到 (+) 运算符的语法问题。 有人可以建议或提供正确的语法查询。

My Oracle Query 的连接如下所示:

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 服务器版本相对应的手册,以在 ') AND B.LINK_REASON_TYP(+) = 'CONTAINS' AND B.EFF_DT(+)

谢谢。

【问题讨论】:

    标签: mysql oracle amazon-aurora


    【解决方案1】:

    (+) 是 Oracle 的 old,用于进行外连接的专有语法。 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,则需要将 sysdate 替换为 current_timestampcurrent_date,具体取决于您将列数据类型从 Oracle 转换为 MySQL 的方式。

    【讨论】:

    • 不幸的是,它没有给我预期的记录数.. 对于 mysql,您可以使用 sysdate() 而不是不带括号的,或者还有另一个选项 now()
    猜你喜欢
    • 2019-05-14
    • 2020-05-16
    • 1970-01-01
    • 2018-07-18
    • 2021-12-11
    • 2016-08-21
    • 2018-09-16
    • 2018-04-11
    • 1970-01-01
    相关资源
    最近更新 更多