Я новичок в 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');
Первый запрос выбора работает нормально и показывает правильный результат. Но если оператор дает пустой результат, когда результат первого запроса пуст.
Я проверил оба запроса отдельно, как показано ниже, они оба работают.
Первый запрос,
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 в том же запросе.
@Brien извини, что здесь была опечатка
теперь я исправил это, но все еще получаю пустой результат
Вы используете @Seatno в обоих своих запросах.
Чтение равно null vs = null
@ ks123 No. только во втором запросе
@ P.Salmon Я проверил это, используя как 'is null', так и '= null'
Не используйте имена параметров, которые совпадают с именами столбцов.
@ P.Salmon все параметры отличаются от названий столбцов






Мои предложения были бы.
1) У вас много joins, посмотрите, имеет ли каждое соединение какие-либо значения и правильно ли подключены эти joins, что означает, что соединения имеют одинаковую ценность.
2) Проверьте свои параметры. В среде SQL проверьте, дают ли ваши параметры результаты или нет.
3) Совет также может быть, проверьте, правильно ли передаются ваши параметры. Создание вывода немедленно сообщит вам, разработчику, что не так с вашим кодом.
мой запрос правильный и работает нормально, но когда я передаю ему параметры, он не работает
IF (@SeatNo является NULL), то
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;
КОНЕЦ ЕСЛИ;
запись вместо '=';
Я уже пробовал, но он работает только до тех пор, пока результат первого запроса не станет пустым. когда первый запрос добавляет какое-то значение в @SeatNo, тогда я получаю пустой результат, даже первый запрос также пуст
Обновлено: - ЕСЛИ (@SeatNo равно NULL или @ SeatNo = ''), то
Если вы хотите вернуть значение, если @SeatNo имеет значение null или пусто, напишите еще часть для новых требований ...
Я изменил выражение IF, как вы мне предлагаете. Все еще не работает
Спасибо всем за то, что ответили и помогли мне понять, в чем я ошибаюсь. Я получил свой ответ Просто объявите нулевую переменную в начале SP, например
BEGIN
select @SeatNo := NULL;
select @SeatNo := Fare from Travel_booking.SpecialFares where TravelId=travel_id and date=tr_date ;....
Как вы обнаружили, SELECT ... INTOне делает то, что люди обычно ожидают, когда строка не найдена. Вам также следует изучить сохраненные программные переменные, а не использовать пользовательские переменные в процедурах.
SELECT @SeatN :=. . .написан неправильно.