我有一个包含min
和max
列的表格。我想搜索一组数字在min
和max
范围之间的行。
示例:我有一组(3, 4, 11, 18)
。
我的查询过滤可能会显示:
(3 between min and max) OR
(4 between min and max) OR
(11 between min and max) OR
(18 between min and max)
但我想知道是否有更好的方式:
(3,4,11,12) between min and max
与#1
我需要这个,因为该集可以在不同的搜索之间改变。任何帮助或建议都表示赞赏。
更简单上下文中的表是类(classid,classname,minage,maxage)。有成千上万的类 - 所以我得到web请求搜索具有特定年龄组的类,例如(3,4,11,12),其中用户正在搜索3岁,4岁,11岁和12岁的班级。
目前我的查询看起来: select * from class where((3 in min and max)OR(4 min and max)OR(11 min and max)OR(18 min and max))
答案 0 :(得分:2)
像
这样的东西SELECT *
FROM MyTable AS T
WHERE EXISTS (
SELECT *
FROM MySet AS S
WHERE S.val BETWEEN T.my_min AND T.my_max
);
答案 1 :(得分:0)
如果您可以通过发布表架构来添加更多信息,我们将能够为您提供更多帮助。但是,此示例查询可以为您提供一些提示。
示例查询:
SELECT SampleValue, ColB, ColC FROM TableName WHERE SampleValue in (1,2,3)
答案 2 :(得分:0)
另一种方法是首先创建一个表(一次)并用所有可能的年龄(从1到101)填充它:
CREATE TABLE Age
( allowed TINYINT
, PRIMARY KEY (allowed)
) ;
INSERT INTO Age
VALUES
(1), (2), (3), ... (101) ;
在搜索查询中使用此功能:
SELECT *
FROM Class
WHERE EXISTS
( SELECT *
FROM Age
WHERE Age.allowed BETWEEN Class.minage AND Class.maxage
AND Age.allowed IN (3, 4, 11, 18)
)