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  
除了这种写法还有其他写法吗,这样写应该不好吧 ??

解决方案 »

  1.   

    1、and优先级高,如果不想加,另换写法。
    2、尽量少用嵌套SQL内联视图。
    3、使用having子句过滤。
    SELECT SUM(A) AS SUM_NUM FROM T HAVING SUM_NUM > 10
      

  2.   

    SELECT SUM(A) AS SUM_NUM FROM T HAVING SUM(A) > 10
      

  3.   

    哦,对,HAVING  全都忘光了。。哎~~~多谢
      

  4.   


    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