主要用case语句,我写的如下,没测试过,不过case我以前用过
UPDATE Reg a
   SET flag=(
             SELECT (
                     CASE WHEN (b.finish IS NULL) AND (b.STOP<SYSDATE))
                               THEN '1' 
                          WHEN (a.regdate BETWEEN b.STOP AND b.finish)
                               THEN '1'
                       ELSE  '0'
                     END
                    ) 
               FROM log  b
              WHERE a.id=b.id
            )  
 WHERE EXISTS
  (
   SELECT 'X' 
     FROM LOG b
    WHERE a.id=b.id
  )

解决方案 »

  1.   

    update reg set flag=decode(tab.sm,0,'0','1') where (select count(*) from logkey,reg where (reg.regdate between logkey.stop and logkey.finish) or (logkey.finish = NULL and logkey.stop<to_char(sysdate,'yyyy-mm-dd'))) tab;
      

  2.   

    更完整些:(假如字段flag为字符数据类型)
    update reg set flag=decode(tab.sm,0,'0','1') where (select count(*) sm from logkey,reg where (reg.regdate between logkey.stop and logkey.finish) or (logkey.finish = NULL and to_char(logkey.stop,'yyyy-mm-dd')<to_char(sysdate,'yyyy-mm-dd'))) tab;
      

  3.   


    update reg a set flag=(select 1 from log where id=a.id and ((RegDate between stop and  finish) or (stop<syadate and finish is null)))
      

  4.   

    谢谢两位的回答!但这不是一个简单的语句,在log中ID为3的有两个区间
    两位是否有考虑?
    3 1 2003-4-1 2003-4-30
    3 2 2003-5-2 2003-5-4
      

  5.   

    update reg a set flag=(select decode(sign(count(*) - 1),1,'1','0') from log b 
     where b.id=a.id and ((a.RegDate > b.stop and  a.RegDate < b.finish) or 
      (b.stop<syadate and b.finish is null)))
      

  6.   

    update reg set flag=decode(tab.sm,0,'0','1') where (select count(*) sm from log,reg where (log.id=reg.id and log.time=1 or log.id=reg.id and log.time=2 ) and (reg.regdate between log.stop and log.finish) or (log.finish is null and to_char(log.stop,'yyyy-mm-dd')<to_char(sysdate,'yyyy-mm-dd'))) tab;
      

  7.   

    update reg set flag=nvl((select 1 from log where id=reg.id and ((reg.regdate between stop and finish) or (stop<sysdate and finish is null))),0)