MySQL中关联多表判断数字是否落在指定多组区间范围内的方法
MySQL 跨表校验数值是否落在指定区间方案
表结构说明
- 待校验数值表(表名:
num_table)ID:关联ID,用于两张表匹配Number:待校验的目标数值
- 区间配置表(表名:
range_table)ID:关联ID,和num_table的ID字段对应start_range:区间起始值end_range:区间结束值
注意:如果你的区间表字段名是带空格的
start Range、end Range,SQL中需要用反引号包裹字段名,即写为`start Range`、`end Range`避免语法报错。
实现查询语句
推荐使用EXISTS语法,性能优于关联后聚合的写法,只要匹配到任意符合要求的区间就会停止检索:
SELECT n.Number, EXISTS ( SELECT 1 FROM range_table r WHERE r.ID = n.ID AND n.Number BETWEEN r.start_range AND r.end_range ) AS is_in_range FROM num_table n;
如果需要直接输出{数值} - true/false格式的结果,可以做一层格式转换:
SELECT CONCAT( n.Number, ' - ', IF(EXISTS ( SELECT 1 FROM range_table r WHERE r.ID = n.ID AND n.Number BETWEEN r.start_range AND r.end_range ), 'true', 'false') ) AS check_result FROM num_table n;
补充说明:
BETWEEN会同时包含区间的起始值和结束值,如果你的业务需求是左开右闭、左闭右开等其他逻辑,自行替换为n.Number > r.start_range AND n.Number < r.end_range对应写法即可。
示例输出
按照你给出的测试数据,查询结果如下:
| check_result |
|---|
| 192056 - true |
| 143067 - false |
内容的提问来源于stack exchange,提问作者Akanksha
相关产品推荐
相关产品推荐

