我创建了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
?请提出建议。
答案 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
或>
运算符。