select / where mysql没有正确选择

时间:2013-04-16 18:08:29

标签: mysql select where

我设法在一些帮助下想出了这个,但由于某种原因它不能正常工作。 最后的整个行与类别似乎是相当随机的我不能完全解决它的作用。

使用或持有似乎和月份一样正常工作,我相信如果所有项目都在一般类别中,但是在任何其他地方都可以正常工作,这很奇怪。

如果有人能看到问题,我真的很感激。

WHERE (Status = 'Used' OR Status = 'Holding') AND MONTH( Display_Date )=4 AND Category = 'General' OR Category = 'mountains' OR Category = 'rivers' OR Category = 'sky' OR Category = 'crass' OR Category = 'sea' OR Category = 'flowers'

3 个答案:

答案 0 :(得分:0)

很可能它与括号有关。我猜你想要像.-

这样的东西
WHERE (Status = 'Used' OR Status = 'Holding') AND 
      MONTH(Display_Date) = 4 AND 
      (Category = 'General' OR Category = 'mountains' OR Category = 'rivers' OR Category = 'sky' OR Category = 'crass' OR Category = 'sea' OR Category = 'flowers')

请注意,AND的优先级高于OR,因此,如果没有括号,只要任何OR语句为true,原始条件就为true,无论之前的AND条件如何。

答案 1 :(得分:0)

我假设您说的是,应该返回任何与您指定的任何类别值匹配的结果(以及匹配Status和Display_Date的检查)。如果是这种情况,您需要将所有检查包括在括号中的Category:

WHERE (Status = 'Used' OR Status = 'Holding') AND MONTH( Display_Date )=4 AND     (Category = 'General' OR Category = 'mountains' OR Category = 'rivers' OR Category = 'sky' OR Category = 'crass' OR Category = 'sea' OR Category = 'flowers')

答案 2 :(得分:0)

AND优先于OR,因此您现在阅读的条件是:

WHERE ((Status = 'Used' OR Status = 'Holding') AND MONTH( Display_Date ) = 4 AND Category = 'General') OR Category = 'mountains' OR Category = 'rivers' OR Category = 'sky' OR Category = 'crass' OR Category = 'sea' OR Category = 'flowers'

我认为你想要这个:

WHERE  status IN ('used', 'holding')
       AND MONTH(Display_Date) = 4
       AND category IN ('general', 'mountains', 'rivers', 'sky', 'grass', 'sea')