问题描述
- 关于oracle关联表查询的sql语句
-
现在两张表,分别是表A,表B.表A:
ID CONTENT STARTDATE ENDDATE
1 测试内容1 2014/6/1 2014/6/15
2 测试内容2 2014/5/25 2014/6/30
3 测试内容3 2014/6/8 2014/7/1
4 测试内容4 2014/6/10 2014/6/30表B:
ID A_ID CONTENT MDATE
1 2 测试1 2014/6/5
2 2 测试3 2014/5/3
3 4 测试2 2014/6/7表A的ID和表B的A_ID是主外键关系,现在的目的是:
查询表A,如果表A所对应的B表中,MDATE在表A的STARTDATE 和 ENDDATE 之间,则表A的该记录不显示。最后查询结果为:
ID CONTENT STARTDATE ENDDATE
1 测试内容1 2014/6/1 2014/6/15
3 测试内容3 2014/6/8 2014/7/1
4 测试内容4 2014/6/10 2014/6/30求高手帮写sql语句。。。。
解决方案
select id, content, startdate, enddate
from (select A.*, B.Id as bid
from A
left join B on A.id = B.a_Id
and to_char(B.Mdate, 'yyyy/mm/dd') >= to_char(A.Startdate, 'yyyy/mm/dd')
and to_char(B.Mdate, 'yyyy/mm/dd') <= to_char(A.Enddate, 'yyyy/mm/dd')) t
where t.bid is null
order by id
先查询在mdate在范围之内的,然后通过验证bid是否为空过滤