两段SQL查询语句差异咨询:无报错但返回结果不同的原因
两段SQL查询的核心差异分析
第一段SQL的逻辑错误
第一段的WHERE子句写法存在严重逻辑问题:
SELECT DISTINCT winery FROM winemag_p1 WHERE LOWER(description) LIKE '%plum%' OR '%chery%' OR '%rose%' OR '%hazelnut%' ORDER BY winery
这里OR后面直接跟'%chery%'这类字符串,在SQL中非空字符串会被隐式判定为布尔值TRUE。所以整个WHERE条件等价于:LOWER(description) LIKE '%plum%' OR TRUE OR TRUE OR TRUE
最终结果是所有行都会被匹配,返回的是表中全部去重后的winery,完全没起到筛选关键词的作用。
第二段SQL的正确逻辑
第二段的WHERE子句是标准的多条件筛选写法:
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都对应完整的匹配条件,只有当description转小写后包含plum、cherry、rose、hazelnut中任意一个关键词时,该行才会被筛选出来,返回的是符合关键词条件的去重winery。
另外补充:第一段里的chery是拼写错误,第二段是正确的cherry,但这不是导致结果差异的核心原因,核心是OR条件的语法逻辑错误。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

