在空值的情况下如何使用 like 返回数据

时间:2021-07-30 05:52:46

标签: sql sql-like

我有一个 SQL script,它返回 3 个数据:ProductCategorySubcategory 我希望可以根据产品、类别和子类别从返回的列表中进行过滤。我需要始终使用过滤器中的所有三个项目。 我正在使用 Like 关键字 如果我仅用于过滤 ProductType,可以看出我有很多元素,其中 CategorySubcategory 为空

enter image description here

但是如果我也为类别和子类别添加过滤器,如果我在屏幕截图中添加 like,我不会取回所有元素,(我认为在这种情况下我会取回结果与之前的屏幕截图相同),但我得到了这个

enter image description here

我试过这样,

enter image description here

在这里,我想我会取回所有名称中带有“s”的产品以及带有“b”的类别的所有项目,因此在这种情况下这将是预期的结果

enter image description here

您能否建议我如何使用 like 关键字来正确完成这项工作?谢谢!

2 个答案:

答案 0 :(得分:1)

这就是你所拥有的:

where producttype like '%S%'
  and category like '%b%' or category is null
  and subcategory like '%%' or subcategory is null

但是 AND 的优先级高于 OR,所以这转化为

where (producttype like '%S%' and category like '%b%')
   or (category is null and subcategory like '%%')
   or (subcategory is null)

因此,添加括号以获得您想要的内容:

where producttype like '%S%'
  and (category like '%b%' or category is null)
  and (subcategory like '%%' or subcategory is null)

混合使用 ANDOR 时应始终使用括号。

答案 1 :(得分:0)

我想这就是你想要的

WHERE ProductType LIKE '%s%' AND Category LIKE '%b%'

这个逻辑让你的结果出错,它让你得到带有“b”字符的类别 或为空

Category LIKE '%b%' OR Category IS NULL