我的查询语句是:
select * from cash_operator_log where 
op_date>=to_date('2010-11-01 00:00:00','yyyy-mm-dd hh24:mi:ss') 
and 
op_date<to_date('2010-11-10 00:00:00','yyyy-mm-dd hh24:mi:ss')+1
and AGENT_ID='65'
and action='HA' or action='HD'结果:
ID                  OP_DATE  PARENT_AGENT_ID  ACTION  AGENT_ID  VALUE  RESULT  DEMO  
20080130225048363  30-1月 -08  57             HD  560  50  S  2,手工扣减  
20080130225144238  30-1月 -08  57             HD  235  50  S  2,手工扣减  
20080130225217895  30-1月 -08  57             HD  160  100  S  2,手工扣减  
20080130225302432  30-1月 -08  57             HD  861  50  S  2,手工扣减  
20080130225404226  30-1月 -08  57             HD  974  30  S  2,手工扣减额度  
20080129140705198  29-1月 -08  57             HD  65  100  S  test  
20080129160235694  29-1月 -08  57             HD  65  1  S  test  
20080219140619694  19-2月 -08  57             HD  65  2  S  TEST  
20101109134321996  09-11月-10  57             HA  65  100  S  test  
20101110103729417  10-11月-10  57             HD  65  12  S  hd  
如果是这样查询:
select * from cash_operator_log where 
op_date>=to_date('2010-11-01 00:00:00','yyyy-mm-dd hh24:mi:ss') 
and 
op_date<to_date('2010-11-10 00:00:00','yyyy-mm-dd hh24:mi:ss')+1
and action='HA' or action='HD'
and AGENT_ID='65'结果是:
ID  OP_DATE  PARENT_AGENT_ID  ACTION  AGENT_ID  VALUE  RESULT  DEMO  
20080129140705198  29-1月 -08  57  HD  65  100  S  test  
20080129160235694  29-1月 -08  57  HD  65  1  S  test  
20080219140619694  19-2月 -08  57  HD  65  2  S  TEST  
20101109134321996  09-11月-10  57  HA  65  100  S  test  
20101110103729417  10-11月-10  57  HD  65  12  S  hd  还有就是,我明明带有时间条件(OP_DATE),可为什么出来的结果却不都是在这个时间范围
我要怎么样才能得到我想要的结果呢?

解决方案 »

  1.   

    注意and 和 or的优先级,先and, 后or
    前者:(...and AGENT_ID='65'
    and action='HA') or (action='HD')
    后者等价于:
    (... and action='HA') or ( action='HD'
    and AGENT_ID='65')显然不一样
      

  2.   

    当一个语句中同时包含多个逻辑运算符时,取值的优先顺序依次为:NOT、AND 和 OR。如果你想要指定顺序,最好加上括号!
      

  3.   

    把action='HA' or action='HD'用括号括起来就好了,and优先级比or大,还有,就是括号优先级最大,你有不确定优先级的时候,建议你按你想的用括号括起来