【探讨兼散分】SQL语句简化
SELECT FIELD1,FIELD2,FIELD3
FROM SOME_TABLE
WHERE
(Begin < A AND End > A)
OR
(Begin <B AND End < B)
OR
(Begin > A AND End < B)
OR
(Begin < A AND End > B)
后面的查询语句如何简化?
前10个“顶”“接分”“关注”有分
提供正确答案均有分
------解决方案--------------------顶了!
------解决方案--------------------是不是时间段重合判断
假设判断时间段A1到A2是否与时间段B1到B2重合
那么,只要条件(A1 <B2) And (B1 <A2)即可~~~
------解决方案--------------------关注先
------解决方案--------------------感觉没的简化,如果要简化的话也应该是在设计数据库的时候根据需求做优化
感觉LZ是需要根据一个值的区间查询,设计的时候不一定要用2个字段分别存上下限吧,你可以把需求也帖出来,大家一起讨论整个数据库的优化以及简化方案~
------解决方案--------------------简化应该也是在保持效率的基础上吧.我觉得效率还是首位.自己累点也没法子
------解决方案--------------------把需求也帖出来
------解决方案--------------------你的条件存在冗余
(Begin < A AND End > A) 1
OR
(Begin <B AND End < B) 2
OR
(Begin > A AND End < B) 3
OR
(Begin < A AND End > B) 4
看你的条件应该可以看出来B比A大,所以条件1已经包括在条件4种了,也就是说条件1可以不写
------解决方案--------------------也就是说你的语句可以写成
SELECT FIELD1,FIELD2,FIELD3
FROM SOME_TABLE
WHERE
(Begin <B AND Begin > A AND End < B)
OR
(Begin < A AND End > B)
------解决方案--------------------关注
------解决方案--------------------amandag:
(Begin < A AND End > B) 4 可理解为:(Begin < A AND B < End);这句中A、B的大小关系不确定哦。
感觉是可以优化,但不知道楼主到底要查什么...