用户定义的 Mysql 函数,其中条件失败



我创建了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函数。如上所述,查询返回两个酒店ID,它们已经存在于酒店表中。

但是当此查询添加为子查询时,例如

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) 给出结果,子查询还给出 id 125 和 126 作为结果。但是当添加为子查询时,它会失败

这种行为是否应该mysql function IN条款?请建议。

我认为在使用函数时这是 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>运算符。

相关内容

  • 没有找到相关文章

最新更新