mysql> Create Procedure sp_Getnewtask(IN sdate datetime, IN edate datetime,IN sid int,IN tid int,OUT outmsg varchar(50))
-> begin
-> if not exists(
-> SELECT * FROM tbltask WHERE (startdate BETWEEN sdate AND edate)OR (enddate BETWEEN sdate AND edate) OR (sdate BETWEEN startdate AND enddate) OR (edate BETWEEN startdate AND enddate) OR Sid=Sid OR Tid=tid) then
-> set outmsg = 'ADDED SUCESSFULLY';
-> else
-> set outmsg = 'RECORD ALREADY PRESENT';
-> end if;
-> end $$
mysql> select * from tbltask;
| tblid | startdate | enddate | Sid | Lid |
| 1 | 2011-05-20 00:00:00 | 2011-05-29 00:00:00 | NULL | NULL |
1 row in set (0.00 sec)
它显示为记录已经存在,甚至有没有记录存在于数据库中,逻辑错误在SELECT查询
如果我删除的SID,从选择查询TID它工作正常, 请建议为了一些想法CHK运行正确输出
当我试图调用过程, 它返回的,
mysql> call sp_Getnewtask('2011-05-20','2011-05-29',6,8,@outmsg);
-> select @outmsg;
-> $$
查询OK,0行受到影响(0.00秒)
| @outmsg |
| RECORD ALREADY PRESENT |
1行中集(0.00秒)
但我的实际结果应该为 '已添加成功地'
您在'WHERE'标准中使用'OR'或'Sid = Sid' - 这将永远是真的!删除'OR Sid = Sid OR Tid = tid',它应该可以工作。 – sgeddes 2014-09-22 13:10:44
但我想检查一下sid和tid。 – BeginnerStack1 2014-09-22 13:14:25
将您的输入变量重命名为与表格中的字段名称不同。所以inSid和inTid。知道您是否想要将变量与字段,字段到字段或变量与变量进行比较,引擎可能会遇到问题。我没有看到表格中的TID。我看到LID ...所以这意味着TID输入与TID输入相比...是你想要的吗? – xQbert 2014-09-22 13:19:13