2 liermao12 liermao12 于 2014.06.13 14:10 提问

关于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语句。。。。

1个回答

wangjianwei_
wangjianwei_   2014.06.13 17:56

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是否为空过滤

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!