在程序中使用了如下sql语句:
select * from TableName
where field1=''abc'' or field1=''bcd'' and field2 is Null
如果or field1=''bcd''不要的话,查询结果正常,但是加上的话所有符合field1=''abc''的记录都会出现,请教原因以及如何实现结果集为符合上述三个条件的记录,谢谢!

解决方案 »

  1.   

    出现那种结果是必然的,因为field1=''abc'' or field1=''bcd'' and field2 is Null这条句话有问题,计算机是这样做的,在or前表达式是真的,后面的表达式就不做(因为数据库中sql优化),就把满足前一个表达式的记录显来出来.
        我不知你要做什么,就不好帮你写sql语句了
      

  2.   

    select * from TableName
    where (field1=''abc'' or field1=''bcd'') and field2 is Null
      

  3.   

    select * from TableName
    where (field1=''abc'' or field1=''bcd'') and field2 is Null如何不加括号,只要field1=''abc'' 或field1=''bcd''中任一个满足,都会出现
      

  4.   

    sorry !select * from TableName
    where (field1=''abc'' or field1=''bcd'') and field2 is Null如果不加括号,只要field1=''abc'' 或field1=''bcd''中任一个满足,都会出现与你期望值相反的结果。
      

  5.   

    select * from TableName
    where (field1=''abc'' or field1=''bcd'') and field2 is Null应该是这样的
      

  6.   

    因为对于逻辑运算是按非(not)>与(and)>或(or)的资序进行运算的~~你的程序中想应的会先运算后面的与运算也就是说把AND两边的表达式先进行与运算再将结果进行OR运算所以你要达到你想要的结果得用括号
      

  7.   

    and的优先级高于or,当然会出错了,最好在where中用()确定顺序。
      

  8.   

    select * from TableName
    where (field1=''abc'' or field1=''bcd'') and field2 is Null
      

  9.   

    加一个(),因为or 和 and 的优先级不同,当同时出现时,先and 后or
    select * from TableName
    where (field1=''abc'' or field1=''bcd'') and field2 is Null