例如: 
select * from table_a a 
where exist 
( select 1 from table_b b 
where a.公司 = b.公司 
and a.日期 >= b.日期1 
and a.日期 <= b.日期2 
) "a.日期 >= b.日期1"和"a.日期 <= b.日期2",这2个条件,是否可以这样使用,我看一般的exists条件都是相等,没怎么看见过使用比较不等的条件。 如果这样用了,是表示如果2个表里的公司相等,那么a表的日期在b表的日期1和日期2中间的数据都被抽出来吗? 例如 
a表的数据如下: 
公司 日期 
1.房产 20110202 
2.房产 20110228 
3.房产 20110301 
4.机械 20110228 b表的数据如下: 
公司 日期1 日期2 
1.房产 20110201 20110210 
2.房产 20110301 20110331 
3.机械 20000101 20990331 是否抽出的a表的数据为第1,3,4条。 谢谢回答与指点:) 

解决方案 »

  1.   

    测试数据:CREATE TABLE A
    (
        公司 VARCHAR2(20),
        日期 DATE
    );INSERT INTO A VALUES('房产', to_date('20110202', 'YYYYMMDD'));
    INSERT INTO A VALUES('房产', to_date('20110228', 'YYYYMMDD'));
    INSERT INTO A VALUES('房产', to_date('20110301', 'YYYYMMDD'));
    INSERT INTO A VALUES('机械', to_date('20110228', 'YYYYMMDD'));
    CREATE TABLE B
    (
        公司 VARCHAR2(20),
        日期1 DATE,
        日期2 DATE
    )
    INSERT INTO B VALUES('房产', to_date('20110201', 'YYYYMMDD'),  to_date('20110210', 'YYYYMMDD'));
    INSERT INTO B VALUES('房产', to_date('20110301', 'YYYYMMDD'),  to_date('20110331', 'YYYYMMDD'));
    INSERT INTO B VALUES('机械', to_date('20110101', 'YYYYMMDD'),  to_date('20110331', 'YYYYMMDD'));
    测试结果:
    完全实现的预计的需求。
      

  2.   

    非常感谢1#的朋友。一般网上所说的资料都是把in和exists放在一起作比较,说in和exists是可以互换的。
    我困惑的是,我觉得上面那个exists用in来写的话,感觉很麻烦,很难实现,所以我怕这个用法是错误的。
      

  3.   

    可以的,也可以这样写select * from table_a a  
    where EXISTS  
      (select 1 from table_b b  
      where a.公司 = b.公司  
        and a.日期 BETWEEN b.日期1 AND b.日期2)  
      

  4.   

    如果用in来实现这个功能,又该如何实现了?
    因为a表数据量非常大,而b表很小,用in的话性能可能会好点
      

  5.   

    实测成功:
    是的不建议使用exists,因为消耗比较大。