我正在摆弄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行?
答案 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进行比较。查询的结果是无用的。