例如:
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条。 谢谢回答与指点:)
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条。 谢谢回答与指点:)
(
公司 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'));
测试结果:
完全实现的预计的需求。
我困惑的是,我觉得上面那个exists用in来写的话,感觉很麻烦,很难实现,所以我怕这个用法是错误的。
where EXISTS
(select 1 from table_b b
where a.公司 = b.公司
and a.日期 BETWEEN b.日期1 AND b.日期2)
因为a表数据量非常大,而b表很小,用in的话性能可能会好点
是的不建议使用exists,因为消耗比较大。