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

时间:2019-04-25 13:03:27

标签: mysql mysql-function

我创建了Mysql函数,该函数给出结果整数或NULL。它适用于所有值。如果在简单查询中使用此功能,则aslo可以像预期的那样正常工作:

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?请提出建议。

1 个答案:

答案 0 :(得分:0)

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