因为sql比较长。大概缩短就是 SELECT * FROM PAY WHERE 1 = 1 AND ( PAYMENT_METHOD_CD = '0'
OR PAYMENT_METHOD_CD = '1'
OR PAYMENT_METHOD_CD = '2 ') 当然用 PAYMENT_METHOD_CD IN ('0','1','2');也是可以的。我之前写的是 下面这句:SELECT * FROM PAY WHERE 1 = 1 AND PAYMENT_METHOD_CD = '0'OR PAYMENT_METHOD_CD = '1'OR PAYMENT_METHOD_CD = '2 ' 不带括号。为什么带不带括号结果差好多啊。而且不带括号查询的结果是错的。但是我感觉没啥区别呢?正常语句不应该是 select * from A where a = '1' and b = '2' 吗?? 为啥加括号呢?求指教
但是我不加括号,结果是错的。查询结果不是我想要的。而且我前面还有条件。所以要用where 1=1 AND 来做。
追答假设整个集合为U,经过你前面的查询条件得到一个结果集合为A,其中A包涵了PAYMENT_METHOD_CD为‘0’,‘1’,'2','3','4'的所有记录。
那么现在就是看加括号和不加括号的区别。
1)不加括号:A且'0'或'1'或‘2’ 这么个形式
第一步,A且'0' ,从A中找到为'0'的集合A1,处理A1或'1'或‘2’
第二步,A1或‘1’,A1里只有为'0'的记录,得到的结果还是A1,处理A1或'2'
第三步,同第2步,最后得到A1,就是交易方式为'0'的记录
2)加括号:A且(‘0’或‘1’或‘2’)
第一步,(‘0’或‘1’或‘2’),因为有括号,具有较高优先级,从整个集合U中找出为'0'或'1'或'2'的记录,得到集合B。处理A且B
第二步,A且B,得到正确结果集合C。
真是服了你了!!!
单独的
SELECT * FROM PAY WHERE (PAYMENT_METHOD_CD = '0'
OR PAYMENT_METHOD_CD = '1'
OR PAYMENT_METHOD_CD = '2 ')
和
SELECT * FROM PAY WHERE PAYMENT_METHOD_CD = '0'
OR PAYMENT_METHOD_CD = '1'
OR PAYMENT_METHOD_CD = '2 '
是没有区别的
但是你这里,还有convert(employee_cd,signed)=convert('80',singned)这个条件,
不加括号的话,就会被认为
SELECT * FROM PAY WHERE (convert(employee_cd,signed)=convert('80',singned) and PAYMENT_METHOD_CD = '0' )
OR PAYMENT_METHOD_CD = '1'
OR PAYMENT_METHOD_CD = '2 '
这不就跟小学加减乘除混合运算一个逻辑嘛