大家好,我有一张下面结构的表格:
create table prices(
id int not null,
mini float not null,
maxi float not null,
primary key (id)
);
我选择特定范围内的行的ID。 以下小提琴说明了一切: http://sqlfiddle.com/#!2/5885d/2
set @pmini1 = 82.5;
set @pmaxi1 = 85.5;
select *
from prices
where ((@pmini1 between mini and maxi) or
(@pmaxi1 between mini and maxi));
好的,所以知道我试图实现这个条件:
可以在不使用多个查询的情况下执行此操作吗? 任何建议或提示将不胜感激。
如果您需要更多信息,请与我们联系,我会修改帖子。
答案 0 :(得分:1)
一种方法是计算mini的最小值和maxi的最大值,然后将它们用于比较:
select *
from prices p cross join
(select MIN(mini) as minmini, MAX(maxi) as maxmaxi from p) const
where ((@pmini1 between p.mini and p.maxi) or
(@pmaxi1 between p.mini and p.maxi) or
(@pmini1 < const.minmini and p.mini = const.minmini) or
(@pmaxi1 > const.maxmaxi and p.maxi = const.maxmaxi)
)
在MySQL中,您还可以将其简洁地称为:
select *
from prices p cross join
(select MIN(mini) as minmini, MAX(maxi) as maxmaxi from p) const
where ((greatest(@pmini1, const.minmini) between p.mini and p.maxi) or
(least(@pmaxi1, const.maxmaxi) between p.mini and p.maxi)
)