请问:get range 范围查询,能不能查询到两个主键区间内的总记录数?
本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。https://developer.aliyun.com/article/706511 点击链接欢迎加入感兴趣的技术领域群。
查询要求:过滤出s落在某月2号到9号内的数据或者e落在2号到9号内的数据。
分析:按字面的理解,就是取条件:2<=s<=9||2<=e<=9下的数据,由于一条数据是由s和e同时确定的,所以这样取出的数据, 是包含重复数据的,重复数据的条件是2<=s<=e<=9,当然使用distinct或者not exsit,not in等关键字可以过滤掉。
另一个好的思路是使用数学中集合补集的概念(当然第一个思路也使用了集合的思想):数据库中的某条数据要么符合条件,要么不符合条件,两者互斥。如果从正向直接找符合条件的不好找,那么可以 逆向考虑,找不符合条件的数据,然后取其否定。在这个例子中,所有不符合条件的数据包括:s>9的数据(e>=s>9)和e<2的数据(s<=e<2),用数学表达式表示(s>9∪e<2,∪是||的意思),取其否定的数据即为符合的条件的,否定的数据表达式为:s<=9∩e>=2,(∩是&&的意思)转换成sql表达式即为 start_time <=9 AND end_time>=2
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。