几个基础问题,还请多多指教!

心如刀割 2011-05-30 10:11:52

SELECT * FROM T WHERE 1 = 1
AND (
(a > 10 OR a < 10) --A条件
OR (b > 10 OR b < 10) --B条件
AND (c > 10 OR c <10) --C条件
)
这个条件的意思应该是A条件或者B条件有一个为真,并且c条件为真才查吧。
查出来的结果为什么没有算上 C 的条件??我去掉AND (c > 10 OR c <10) 结果和不去掉,结果都是一样的?
AND (
((a > 10 OR a < 10)
OR (b > 10 OR b < 10))
AND (c > 10 OR c <10) 这样才是我想要的结果。
但是我的条件都是动态拼成的,a > 10 OR a < 10,b > 10 OR b < 10,c > 10 OR c <10,这里的or是固定的
但是外面的OR和AND是不固定的,如果像上面一样,加上括号,感觉条件意思就变了,而且在程序里拼写起来也很复杂。
应该怎么写才对啊?



SELECT * FROM (
SELECT * FROM T
where 1 = 1
and a > 1 A处
)
where
and a > 1 B处
在A处写条件或者在B处写条件,查出的结果虽然都一样,两者有上面区别,效率上哪个更快?




SELECT SUM(A) AS SUM_NUM FROM T
WHERE SUM_NUM > 10
想查出总数量 大于10的。 这样写不对。
我现在用的是
SELECT * FROM (
SELECT SUM(A) AS SUM_NUM FROM T
) WHERE SUM_NUM > 10
除了这种写法还有其他写法吗,这样写应该不好吧 ??
...全文
115 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
304的的哥 2011-05-31
  • 打赏
  • 举报
回复

1.
select * from t
where 1=1
and (a!=10 or b!=10)--a或者b有一个为真
and c!=10--并且c为真
/
2.
--其实没什么区别,你还不如去掉外层查询:
select * from t
where 1=1 --不要被这个谓词给迷糊了,
and a>1 --这才是真正的条件
--这个查询可以考虑在a上建立索引,前提是数据量非常大
3.
--很明显,使用having过滤
select sum(a)
from t
having sum(a)>10
心如刀割 2011-05-30
  • 打赏
  • 举报
回复
哦,对,HAVING 全都忘光了。。。。。哎~~~多谢
tangren 2011-05-30
  • 打赏
  • 举报
回复
SELECT SUM(A) AS SUM_NUM FROM T HAVING SUM(A) > 10
daoqin000 2011-05-30
  • 打赏
  • 举报
回复
很有难度啊....
tangren 2011-05-30
  • 打赏
  • 举报
回复
1、and优先级高,如果不想加,另换写法。
2、尽量少用嵌套SQL内联视图。
3、使用having子句过滤。
SELECT SUM(A) AS SUM_NUM FROM T HAVING SUM_NUM > 10

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧