这两者有什么不同?他们都可以运行没有错误,但给我不同的答案。以下是它们的完整代码:
SELECT DISTINCT winery
FROM winemag_p1
WHERE LOWER(description) LIKE '%plum%' OR '%chery%' OR '%rose%' OR '%hazelnut%'
ORDER BY winery
SELECT DISTINCT winery
FROM winemag_p1
WHERE LOWER(description) LIKE '%plum%'
or LOWER(description) LIKE '%cherry%'
or LOWER(description) LIKE '%rose%'
or LOWER(description) LIKE '%hazelnut%'
ORDER BY winery
OR
在编程语言中不像在英语中那样分布。LIKE
的优先级高于OR
,因此第一个条件等价于
WHERE (LOWER(description) LIKE '%plum%')
OR '%chery%'
OR '%rose%'
OR '%hazelnut%'
当您在OR
中使用字面值字符串时,它被转换为数字;任何不以数字开头的字符串都被转换为0
,因此它相当于
WHERE (LOWER(description) LIKE '%plum%') OR 0 OR 0 OR 0
在布尔上下文中,0
为FALSE
,非零为TRUE
。因此,由于anything OR FALSE
等价于anything
,最终结果是你的条件等价于
WHERE LOWER(description) LIKE '%plum%'