明天找不到记录

时间:2014-12-11 07:24:19

标签: sql oracle

我正在使用Oracle10g。

我想从桌子上找到明天的遗失记录。以下是我到目前为止所尝试的查询。

select distinct P.PID, P.CITY from PROFILES P, TABLE2 T2
where T2.PID = P.PID
    and P.PID not in (select PID from TABLE2 where DELDATE=trunc(sysdate+1))
    order by P.CITY, P.PID

以下是表格结构(简化):

PROFILES
    PID varchar2(10)
    PNAME varchar2(50)
    CITY varchar2(20)

TABLE2
    PID varchar2(10)
    DELDATE date
    QTY number

TABLE2包含客户的交付(交付/预期),我想获得明天没有交付的客户。

上面的查询给出了我的输出作为扩展,即所有在明天没有记录的PID在TABLE2中。

我的问题是,这个查询可以写得更优雅吗?具体而言,不使用not in

2 个答案:

答案 0 :(得分:1)

select P.PID, P.CITY 
from PROFILES P join TABLE2 T2 on T2.PID = P.PID
group by P.PID, P.CITY 
having sum(case when T2.DELDATE=trunc(sysdate+1) then 1 else 0 end) = 0;

答案 1 :(得分:1)

所以你只是加入table2才能检查此表中是否存在配置文件?

select pid, city
from profiles
where pid in (select pid from table2)
and pid not in (select pid from table2 where deldate = trunc(sysdate) + 1);

因为两个条件(pid必须在table2中,而pid必须不在table2中,明天才有deldate)参考同一个表,你可以一次完成:

select pid, city
from profiles
where pid in 
(
  select pid 
  from table2
  group by pid
  having count(case when deldate = trunc(sysdate) + 1 then 1 end) = 0
);