我创建了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
或>
运算符。