是否有其他方法可以重写/改进此查询,尝试使用较少的拼写错误并尽可能提高性能:
Select
(Select Sum(value) from table1
where code = 'B2'
and date between DATE '2017-01-01'
and DATE '2017-03-31')
+
(Select Sum(value) from table2
where code = 'B2'
and date between DATE '2017-04-01'
and DATE '2017-04-30')
我也试过工会,但这仍然不是我需要的:
Select Sum(value)
from (Select code, value from table1
Where date between DATE '2017-01-01'
and DATE '2017-03-31')
union all
(Select code, value from table1
Where date between DATE '2017-04-01'
and DATE '2017-04-30')
where code = 'B2'
谢谢
答案 0 :(得分:1)
您的第一个查询没问题。 。 。假设你最后有一个from dual
。
要获得性能,您需要table1(code, date, value)
和table2(code, date, value)
上的索引。请注意,索引中列的顺序很重要。
答案 1 :(得分:1)
如果错误表示您的查询中有两次条件代码='B2',则可以将其移至from子句。无论如何,请注意子查询可以返回NULL。使用NVL
(或COALESCE
)来解决此问题。
select
nvl((select sum(value) from table1
where code = x.code and date between date '2017-01-01' and date '2017-03-31'), 0)
+
nvl((select sum(value) from table2
where code = x.code and date between date '2017-04-01' and date '2017-04-30'), 0)
from (select 'B2' as code from dual) x;