a表 有id、starttime(timestamp时间类型)、endtime(timestamp时间类型)等b表有id、starttime(timestamp时间类型)、endtime(timestamp时间类型)等两表id是一样的  时间可能有交集求sql语句:将a表记录删除  条件是b表没有任何记录的时间在a表的时间范围内(无交集)  以a.id = b.id匹配举例:a表1  1001  2012-10-10 10:10:10 2012-10-10 10:20:10 2  1001  2012-10-10 10:30:10 2012-10-10 10:40:10 b表1  1001  2012-10-10 10:05:10 2012-10-10 10:11:00 
这样的话 a表第二条记录将删除PS:效率越高越好  因为数据可能有几万甚至几十万条 而且这个操作很频繁谢谢..........

解决方案 »

  1.   

     delete  from A where exists(select 1 from B where A.id=B.id and (A.starttime>B.endtime or A.endtime<B.starttime));
      

  2.   


    a表1 1001 2012-10-10 10:10:10 2012-10-10 10:20:10  2 1001 2012-10-10 10:30:10 2012-10-10 10:40:10  b表1 1001 2012-10-10 10:05:10 2012-10-10 10:11:00  2 1001 2012-10-10 10:35:10 2012-10-10 10:41:00
    你的语句   这样a的第二条记录会删掉不? 我等下试试  
      

  3.   

    错了 是 引用 1 楼 的回复:
    delete from A where exists(select 1 from B where A.id=B.id and (A.starttime>B.endtime or A.endtime<B.starttime));
    a表1 1001 2012-10-10 10:10:10 2012-10-10 10:20:10   2 1001 2012-10-10 10:30:10 2012-10-10 10:40:10   b表1 1001 2012-10-10 10:05:10 2012-10-10 10:11:00   2 1001 2012-10-10 10:45:10 2012-10-10 10:51:00
      

  4.   

    delete from A where exists(select 1 from B where A.id=B.id and (A.starttime>B.endtime or A.endtime<B.starttime));
    从A中取出来每一条数据和B比较   如果存在 则删除
      

  5.   

    delete from A where exists(select 1 from B where A.id=B.id and (A.starttime>B.endtime or A.endtime<B.starttime));这个语句是 把a中的数据 只要和b中无交集  就删除?
      

  6.   

    delete  from A where NOT exists (select 1 from B where A.id=B.id and A.starttime<B.endtime AND A.endtime>B.starttime);
      

  7.   

    解决了  最后sql语句:DELETE FROM A WHERE A.endTime IS NOT NULL AND NOT EXISTS (SELECT 1 FROM B WHERE B.startTime IS NOT NULL AND A.id=B.id AND ((B.endtime IS NOT NULL AND A.starttime<B.endtime AND A.endtime>B.starttime) OR (B.endtime IS NULL AND A.endtime>B.starttime)))
    谢谢各位...
      

  8.   

    DELETE FROM A WHERE A.endTime IS NOT NULL AND NOT EXISTS (SELECT 1 FROM B WHERE A.id=B.id AND B.startTime IS NOT NULL AND ((B.endtime IS NOT NULL AND A.starttime<B.endtime AND A.endtime>B.starttime) OR (B.endtime IS NULL AND A.endtime>B.starttime)))id匹配放前面应该效率高点