在我的数据库中有两列和下面的数据
StartDate Enddate
2015-10-01 2015-10-30
2015-10-15 2015-11-15
2015-09-15 2015-10-15
如果我用startdat搜索:2015-10-16 Enddate:2015-10-20比想要以上所有结果,请帮帮我
我的查询如下
Select * from campaign as c LEFT JOIN campaign_team as t ON c.campaign_id=t.campaign_id where t.user_id
='6' and
(campaign_sdate BETWEEN '2015-10-16' AND '2015-10-20' or campaign_edate BETWEEN '2015-10-16' AND '2015-10-20'
or ( campaign_sdate <= 2015-10-16 and campaign_edate >= 2015-10-20 ) );
提前致谢
答案 0 :(得分:0)
你写了相反的条件
or ( campaign_sdate >= 2015-10-16 and campaign_edate <= 2015-10-20 ) );
在您使用时删除BETWEEN
。
最终查询,
Select * from campaign as c LEFT JOIN campaign_team as t ON c.campaign_id=t.campaign_id where t.user_id
='6' or ( campaign_sdate >= 2015-10-16 and campaign_edate <= 2015-10-20 ) );
答案 1 :(得分:0)
我认为这应该有用
Select * from campaign as c LEFT JOIN campaign_team as t ON c.campaign_id=t.campaign_id where t.user_id ='6' and campaign_sdate >= 2015-10-16 and campaign_edate <= 2015-10-20;
我翻了大于号和小于号。
答案 2 :(得分:0)
在括号内包装和查询,以便查询将这些单独评估为OR部分工作:
Select *
from campaign as c LEFT JOIN campaign_team as t ON c.campaign_id=t.campaign_id where t.user_id ='6'
and (
(campaign_sdate BETWEEN '2015-10-16' AND '2015-10-20'
or campaign_edate BETWEEN '2015-10-16' AND '2015-10-20')
or ( campaign_sdate <= '2015-10-16' and campaign_edate >= '2015-10-20' ) );
Here is a SQL Fiddle显示我的查询
编辑:在最后两个日期条件下发现缺失'。
答案 3 :(得分:0)
如果第一个在第二个开始后结束并且第一个在第二个结束之前结束,则两个周期重叠:
Select *
from campaign as c
JOIN campaign_team as t
ON c.campaign_id=t.campaign_id
where t.user_id ='6'
and campaign_sdate <= '2015-10-20'
AND campaign_edate >= '2015-10-16'
我删除了LEFT JOIN,因为where t.user_id ='6'
无论如何都会将结果更改为内部联接