MySql SP不工作

MySql SP不工作,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我是mysql新手,我正在尝试使用下面的SP获取数据,在这里我使用了if-else语句 CREATE DEFINER=`Travel_user`@`%` PROCEDURE `new_procedure`(in bus_id int, in travel_id int, in tr_date Date, in Seat_no varchar(45)) BEGIN select @SeatNo := Fare from Travel_booking.SpecialFares wher

我是mysql新手,我正在尝试使用下面的SP获取数据,在这里我使用了if-else语句

CREATE DEFINER=`Travel_user`@`%` PROCEDURE `new_procedure`(in bus_id int, in travel_id int, in tr_date Date, in Seat_no varchar(45))

BEGIN

    select  @SeatNo := Fare from Travel_booking.SpecialFares where TravelId=travel_id and date=tr_date ;

IF (@SeatNo = NULL) then

    select @SeatNo := sd.Fare from SeatDetails as sd 
    inner join tbl_ColumnDetails as c on c.ColumnId=sd.ColId 
    inner join tbl_RowsDetails as r on r.RowId=c.RowID 
    inner join BusStructure as bs on bs.StructId=r.StructureId 
    inner join BusDetails as bd on bd.Structure=bs.StructId 
    where sd.IsActive=1 and bd.BusiId=bus_id and sd.travelid=travel_id and sd.SeatNo=Seat_no;

END IF;
END
我是这样称呼它的

call Travel_booking.new_procedure(34, 53, '2018-03-01', 'L2');
First select查询工作正常,显示正确的结果。 但当第一个查询的结果为空时,if语句给出空结果

我已经分别检查了这两个查询,如下所示,它们都在工作

第一个问题

select Fare from Travel_booking.SpecialFares
where TravelId=53 and date='2018-03-02';
第二个问题

select sd.Fare from SeatDetails as sd
inner join tbl_ColumnDetails as c on c.ColumnId=sd.ColId
inner join BusStructure as bs on bs.StructId=r.StructureId
inner join BusDetails as bd on bd.Structure=bs.StructId
where sd.IsActive=1 and bd.BusiId=34 and sd.travelid=53 and sd.SeatNo='L2';

但当我在SP中执行它们并将参数传递给它们时,我在同一个查询中的if语句中得到了空白结果。

我的建议是

1) 您有许多
联接
请查看每个联接是否有任何值,以及这些
联接是否正确连接,这意味着联接的值相等

2) 检查参数,在SQL环境中,检查参数是否生成结果


3) 提示还包括,检查参数是否正确传递。创建输出会立即告诉开发人员您的代码有什么问题。

我的建议是

1) 您有许多
联接
请查看每个联接是否有任何值,以及这些
联接是否正确连接,这意味着联接的值相等

2) 检查参数,在SQL环境中,检查参数是否生成结果

3) 提示还包括,检查参数是否正确传递。创建输出会立即告诉开发人员您的代码有什么问题。

如果(@SeatNoNULL),则

如果结束

write不是“=”

如果(@SeatNo为空),则

如果结束


write不是“=”

感谢大家的回应,帮助我找出我的错误所在。 我得到了答案 只需在SP like的开头声明null变量即可

BEGIN
select  @SeatNo := NULL;
select  @SeatNo := Fare from Travel_booking.SpecialFares where TravelId=travel_id and date=tr_date ;....

感谢大家的回应,帮助我找出我错在哪里。 我得到了答案 只需在SP like的开头声明null变量即可

BEGIN
select  @SeatNo := NULL;
select  @SeatNo := Fare from Travel_booking.SpecialFares where TravelId=travel_id and date=tr_date ;....


选择@SeatN:=
拼写不正确。@Brien很抱歉此处输入错误,现在我更正了它,但仍然得到空白结果您在两个查询中都使用了@Seatno。读取值为null vs=null
SELECT@SeatN:=
拼写不正确。@Brien很抱歉此处输入错误,现在我更正了它,但仍然得到空白结果您在两个查询中都使用@Seatno。Read-up为null vs=null我的查询是正确的,工作正常,但当我向它传递参数时,它不工作。我的查询是正确的,工作正常,但当我向它传递参数时,它不工作working我已经尝试过了,但它只能在第一次查询结果为空之前工作。当第一个查询在@SeatNo中添加一些值时,我得到的是空白结果,即使第一个查询也是空白修改:-如果(@SeatNo为NULL或@SeatNo=''),那么如果您想返回值,如果@SeatNo为NULL或空白,那么为新需求编写其他部分…我按照您的建议修改了IF表达式。仍然不起作用我已经试过了,但它只在第一次查询结果为空之前起作用。当第一个查询在@SeatNo中添加一些值时,我得到的是空白结果,即使第一个查询也是空白修改:-如果(@SeatNo为NULL或@SeatNo=''),那么如果您想返回值,如果@SeatNo为NULL或空白,那么为新需求编写其他部分…我按照您的建议修改了IF表达式。仍然不工作,因为您发现,
选择。。。当找不到行时进入
。您还应该查看存储程序变量,而不是在过程中使用用户定义的变量。。。当找不到行时进入
。您还应该查看存储程序变量,而不是在过程中使用用户定义的变量。