开发者社区> 问答> 正文

Oracle:SQLUNionQuery中的SYSDATE消失

-----unionQuery-----

SELECT COUNT(ID) AS count, '已完成' AS event FROM EVENT_RECEIVE_ENTITY WHERE tenant_id = 'ff8080817592c76a017592d380f00081' AND account_id = 'ff8080817592c76a017592d380f10082' AND (EVENT_STATUS IN ('14', '15') AND ACCOUNT_ID = ? AND system_id IN (?)) UNION ALL SELECT COUNT(ID) AS count, '处理中' AS event FROM EVENT_RECEIVE_ENTITY WHERE tenant_id = 'ff8080817592c76a017592d380f00081' AND account_id = 'ff8080817592c76a017592d380f10082' AND (EVENT_STATUS NOT IN ('1', '14', '15', '17') AND ACCOUNT_ID = ? AND system_id IN (?)) UNION ALL SELECT COUNT(ID) AS count, '预警故障' AS event FROM EVENT_RECEIVE_ENTITY WHERE tenant_id = 'ff8080817592c76a017592d380f00081' AND account_id = 'ff8080817592c76a017592d380f10082' AND (event_status NOT IN ( '1', '2', '3', '14', '15', '17' ) AND system_id IN (?) AND ACCOUNT_ID = ? AND >= CREATED + 0 + (WARNING_TIME - 5) / 24 / 60)

-----left-----

SELECT COUNT(ID) AS count, '已完成' AS event FROM EVENT_RECEIVE_ENTITY WHERE tenant_id = 'ff8080817592c76a017592d380f00081' AND account_id = 'ff8080817592c76a017592d380f10082' AND (EVENT_STATUS IN ('14', '15') AND ACCOUNT_ID = ? AND system_id IN (?)) UNION ALL SELECT COUNT(ID) AS count, '处理中' AS event FROM EVENT_RECEIVE_ENTITY WHERE tenant_id = 'ff8080817592c76a017592d380f00081' AND account_id = 'ff8080817592c76a017592d380f10082' AND (EVENT_STATUS NOT IN ('1', '14', '15', '17') AND ACCOUNT_ID = ? AND system_id IN (?))

-----right-----

SELECT COUNT(ID) AS count, '预警故障' AS event FROM EVENT_RECEIVE_ENTITY WHERE tenant_id = 'ff8080817592c76a017592d380f00081' AND account_id = 'ff8080817592c76a017592d380f10082' AND (event_status NOT IN ( '1', '2', '3', '14', '15', '17' ) AND system_id IN (?) AND ACCOUNT_ID = ? AND SYSDATE >= CREATED + 0 + (WARNING_TIME - 5) / 24 / 60)

为什么在unionQuery.toString()后,right中最后一个过滤条件中的SYSDATE消失了?

原提问者GitHub用户DarylYeung

展开
收起
山海行 2023-07-05 18:10:50 43 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在 Oracle 数据库中,如果在 SQL UNION 查询中使用 SYSDATE 函数,可能会出现该函数的结果消失的情况。这是因为 SQL UNION 操作会对结果进行合并和去重,而 SYSDATE 函数的返回值是动态的,每次查询时都会重新计算。因此,在 SQL UNION 查询中,SYSDATE 函数的结果可能会因为去重操作而消失。
    为了解决这个问题,您可以通过以下几种方式之一进行处理:

    1.在每个 SELECT 查询中都使用 SYSDATE 函数。这样,每个 SELECT 查询都会计算 SYSDATE 函数的结果,并将其包括在结果集中。但是,这种方法可能会导致查询效率较低,因为每个查询都需要计算 SYSDATE 函数。

    2.在 SQL UNION 查询中使用一个子查询来计算 SYSDATE 函数。

    1. 使用 UNION ALL 替代 SQL UNION。因为 UNION ALL 不会对结果进行去重操作,所以在使用 UNION ALL 进行查询时,SYSDATE 函数的结果不会消失。但是,需要注意的是,使用 UNION ALL 可能会导致结果集中包含重复的行。
    2023-07-30 20:35:04
    赞同 展开评论 打赏
  • SQLUtils.toOracleString(unionQuery) 这样试试看

    原回答者GitHub用户wenshao

    2023-07-06 10:47:59
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
Oracle云上最佳实践 立即下载

相关镜像