SQL OR运算符

时间:2010-11-11 15:09:43

标签: sql mysql

我正在摆弄O'Reilly's Learning SQL。给定以下查询,它返回21行:

select account_id, product_cd, cust_id, avail_balance 
from account 
where 
product_cd = 'CHK' OR 
product_cd = 'SAV' OR 
product_cd = 'CD'  OR 
product_cd = 'MM'

习惯了BPF我试过这个,它返回24行和96个警告。

select account_id, product_cd, cust_id, avail_balance
from account
where product_cd = ('CHK' OR 'SAV' OR 'CD' OR 'MM');

我知道,可以使用IN运算符,但为什么第二个运算符呢? 查询返回3行?

3 个答案:

答案 0 :(得分:1)

我猜测有一些隐式转换,('CHK' OR 'SAV' OR 'CD' OR 'MM')被评估为布尔值。这在SQL Server上似乎没有用,例如,我不能这样做:

select ('CHK' OR 'SAV' OR 'CD' OR 'MM')

答案 1 :(得分:1)

如果这是MySql,我想你会发现你的第二个查询返回的结果是等于'where product_cd = 1',这恰好是第一个查询的3行,第二个查询不正确

答案 2 :(得分:0)

如果您正在学习SQL,即ANSI SQL,则应将MySQL设置为使用ANSI容量,或者使用符合ANSI标准的产品来捕获错误并且不返回伪结果。表达式如下:

('CHK' OR 'SAV' OR 'CD' OR 'MM')

在SQL中是明显错误,因为OR只能与布尔值一起使用,例如比较结果。

MySQL将字符串“转换”为整数等,然后将表达式的结果与product_cd进行比较。查询的结果是无用的。