我正在尝试为
编写查询查找今天尚未生成的报告,但昨天已生成。
我试过这个,但这不起作用。
select * from records where name not in
(Select * from records where rdate to_date('26-03-2014','DD-MM-YYYY')) and
and rdate=to_date('27-03-2014','DD-MM-YYYY')
我应该获得包含记录aa
和dd
的输出。
答案 0 :(得分:1)
请尝试:
select
*
from
records
where
rdate=to_date('26-03-2014','DD-MM-YYYY') and
name not in (Select name from records where rdate=to_date('27-03-2014','DD-MM-YYYY'))
答案 1 :(得分:1)
在这种情况下,left outer join
优于not in
:
select * from records r1
left join records r2 on
r1.name = r2.name and
r2.rdate = to_date('27-03-2014','DD-MM-YYYY')
where r1.rdate = to_date('26-03-2014','DD-MM-YYYY') and r2.rdate is null
找到昨天运行的所有报告,然后加入今天运行的报告。使用where r2.rdate is null
然后会排除今天与报告匹配的行,因此您将留下昨天但未在今天运行的行。
这样效率更高,因为not in
重复执行子查询,而这只执行一个查询。