Пользовательские функции Mysql, в которых условие не выполняется - PullRequest
0 голосов
/ 25 апреля 2019

Я создал функцию Mysql, которая дает результат целое или NULL. Работает нормально для всех значений. Если использовать эту функцию в простом запросе, она также работает как ожидалось, как следующий запрос:

select distinct(hsd.hotel_id) 
from hotel_season_detail hsd 
where '2019-04-26' BETWEEN hsd.season_fromdate and hsd.season_todate and hsd.stop_sale >'2019-04-26' and getHotelMarkupManagementId(hsd.id,'AFG') is NOT NULL

getHotelMarkupManagementId() - определяемая пользователем функция mysql. Как и в предыдущем запросе, вернуть два идентификатора отеля, которые уже существуют в таблице отелей.

Но когда этот запрос добавлен как подзапрос, такой как

select * from hotel_service 
where id in 
(select distinct(hsd.hotel_id) 
from hotel_season_detail hsd where '2019-04-26' BETWEEN hsd.season_fromdate and hsd.season_todate and hsd.stop_sale >'2019-04-26' and getHotelMarkupManagementId(hsd.id,'AFG') 
is NOT NULL)

Это дает неправильный результат. Это не работает, как ожидалось. select * from hotel_service where id in (125,126) дает результат, а подзапрос также дает идентификатор 125 и 126 в качестве результата, если выполняется индивидуально. но при добавлении в качестве подзапроса происходит сбой

Должно ли это поведение из-за mysql function в IN предложении? Пожалуйста, предложите.

1 Ответ

0 голосов
/ 25 апреля 2019

Я думаю, что это проблема в Mysql при работе с функцией, потому что если одно и то же условие второго запроса разделено на два подзапроса, то Моя проблема будет решена.

select * from hotel_service where id in (select distinct(hsd.hotel_id) from hotel_season_detail hsd where '2019-04-26' BETWEEN hsd.season_fromdate and hsd.season_todate and hsd.stop_sale >'2019-04-26') and id in (select distinct(hsd.hotel_id) from hotel_season_detail hsd where getHotelMarkupManagementId(hsd.id,'AFG') is not NULL)

Я разделил функцию MySQL в разных подзапросах, но объединялСостояние тогда не дает должного результата.Поэтому я предлагаю использовать функцию mysql, отличную от других условий, если условия были BETWEEN ИЛИ > Оператор.

...