我有一个 SQL
script
,它返回 3 个数据:Product
、Category
和 Subcategory
我希望可以根据产品、类别和子类别从返回的列表中进行过滤。我需要始终使用过滤器中的所有三个项目。
我正在使用 Like
关键字
如果我仅用于过滤 ProductType
,可以看出我有很多元素,其中 Category
和 Subcategory
为空
但是如果我也为类别和子类别添加过滤器,如果我在屏幕截图中添加 like
,我不会取回所有元素,(我认为在这种情况下我会取回结果与之前的屏幕截图相同),但我得到了这个
我试过这样,
在这里,我想我会取回所有名称中带有“s”的产品以及带有“b”的类别的所有项目,因此在这种情况下这将是预期的结果
您能否建议我如何使用 like
关键字来正确完成这项工作?谢谢!
答案 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)
混合使用 AND
和 OR
时应始终使用括号。
答案 1 :(得分:0)
我想这就是你想要的
WHERE ProductType LIKE '%s%' AND Category LIKE '%b%'
这个逻辑让你的结果出错,它让你得到带有“b”字符的类别 或为空
Category LIKE '%b%' OR Category IS NULL