sql - 简化嵌套查询

标签 sql oracle nested

我想获取在给定日期添加和删除的记录(基于 id_external ),所以我使用了下面的查询,它给了我预期的结果,但它花费了很多时间并且 LOGICALREAD 太高了,...有人可以简化它吗

SELECT ar.*
      FROM t_row_data ar
      WHERE ar.id_instance     IS NULL
      AND ar.id_category     IS NULL
      AND ar.source_name      ='SomeSource'
      AND ar.eco_date        IN (date '2017-12-22', date '2017-12-21')
      AND ar.active           = 'Y'
      AND ar.id_external IN 
        (SELECT ar.id_external
              FROM t_row_data ar
              WHERE ar.id_instance     IS NULL
              AND ar.id_category     IS NULL
              AND ar.source_name      ='SomeSource'
              AND ar.eco_date        IN (date '2017-12-22', date '2017-12-21')
              AND ar.active           = 'Y'
              GROUP BY ar.id_external
              HAVING COUNT(1) = 1)

最佳答案

假设表t_row_data有列 id_external, id_instance, id_category, source_name, eco_date, active, col7, col8, ... ,您可以像这样重写查询:

select   id_external, null as id_instance, null as id_category,
         'SomeSource' as source_name, max(eco_date) as eco_date, 'Y' as active,
         max(col7) as col7, max(col8) as col8, ...
from     t_row_data
where    id_instance is null
  and    id_category is null
  and    source_name = 'SomeSource'
  and    eco_date    between date '2017-12-21' and date '2017-12-22'
  and    active      = 'Y'
group by id_external
having   count(*) = 1
;

关于sql - 简化嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48001877/

相关文章:

php - 嵌套的 while 循环,注释相互嵌套

SQL 查询每隔几天就会变慢

java - 如何将数据从 Oracle 导出到 HSQL

sql - 将 Oracle 合并查询转换为 mysql mySQL 查询

Oracle JDBC 异常消息语言是德语

css - 样式嵌套 UL 具有相同的类

mysql - 奇怪的SQL行为:变量未正确设置不相关的计算列

mysql - SQL 前向引用语法

mysql - 如何计算 MySQL 结果中的 has-many-through 关系

java - 为什么我不能在 Java 的内部类中创建枚举?