日期:2014-05-19  浏览次数:20463 次

【探讨兼散分】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的大小关系不确定哦。

感觉是可以优化,但不知道楼主到底要查什么...