sql语句无法处理AND(... OR ... OR ...)

时间:2014-08-14 07:54:19

标签: sql

这可能是一件小事

但我尝试使用这个sql语句:

SELECT * FROM Colors 
WHERE colorHueWarmth < 0 
AND colorV >=0.7 
AND (fk_subCategory=4 OR fk_subCategory=5 OR fk_subCategory=11)

在结果中我获得了完美的colorHueWarmth和colorV,但我也获得了除4,5或11之外的其他值的fk_subcategories。

我尝试更改值但没有结果,甚至可以做这样的声明吗?

有人在做错什么吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

你实际上有多种选择;虽然我会指出查询(在你的问题中)实际上对我有用(见Sql Fiddle

SELECT 
    * 
FROM 
    Colors 
WHERE 
    colorHueWarmth < 0 
    AND colorV >=0.7 
    AND (fk_subCategory=4 OR fk_subCategory=5 OR fk_subCategory=11)

正如其中一条评论所述,我猜你的原文在fk_subCategory条款(我之前的小提琴中的第三个表格)上没有大括号。在使用逻辑时,括号非常重要,应始终用于将项目组合在一起。

最简单的解决方案如下:

SELECT 
    * 
FROM 
    Colors
WHERE 
    colorHueWarmth < 0 
    AND colorV >=0.7 
    AND (fk_subCategory IN(4,5,11));

您可以在线找到大量关于LIKE条款的文档,这里有一些您可能会觉得有用的文章:

考虑到外键约束(4,5或11)的大小,IN子句是一个合理的选项,如果你有其他查询使用类似于大型集合的东西,这可能会变得非常低效,在这种情况下你可以创建一个临时表,其中包含ID和INNER JOIN。 (here is a question regarding alternatives to LIKE