MySQL传递多个WHERE条件

时间:2013-12-05 19:29:35

标签: mysql sql where-clause

我的mysql数据库中有这个查询

SELECT * FROM tabelXYZ
WHERE ((itemX BETWEEN 240 AND 300)
        AND (ItemY BETWEEN 180 AND 200) 
             AND (ItemZ BETWEEN 70 AND 130))
GROUP BY ItemX ASC
LIMIT 50

我有9个结果:

240 - 195 - 130 
250 - 195 - 130 
255 - 185 - 90 
260 - 195 - 130 
265 - 200 - 125 
270 - 195 - 130 
280 - 195 - 130 
290 - 185 - 100 
300 - 195 - 130 

我的问题是我在寻找这个项目

240 - 180 - 70 

我只有在访问此查询时才能找到此结果(itemY的小范围,190而不是200)

SELECT * FROM tabelXYZ
WHERE ((itemX BETWEEN 240 AND 300)
        AND (ItemY BETWEEN 180 AND 190) 
             AND (ItemZ BETWEEN 70 AND 130))
GROUP BY ItemX ASC
LIMIT 50

在此查询之后我收到了这个结果:

240 - 180 - 70 
250 - 180 - 70 
255 - 185 - 90 
260 - 180 - 70 
270 - 180 - 70 
280 - 180 - 70 
290 - 185 - 100 
300 - 180 - 70 
240 - 180 - 70 

我知道我做错了什么,但我不知道是什么 因为它在第一个查询中给出了不同的结果 虽然它应该包括第二个查询的结果

我认为错误的产生是因为WHERE子句

4 个答案:

答案 0 :(得分:1)

GROUP BY ItemX ASC表示每个ItemX值只返回一行。它可能是也可能不是与240 - 180 - 70对应的行。

答案 1 :(得分:0)

如果您GROUP BY ItemX并且说有两个项目itemX = 240,则group子句将只选择其中一个值而不是两者。

答案 2 :(得分:0)

你错过了语法,这是一个很常见的错误,所以不要担心。

您需要此查询:

SELECT * FROM tabelXYZ
WHERE ((itemX BETWEEN 240 AND 300)
    AND (ItemY BETWEEN 180 AND 200) 
         AND (ItemZ BETWEEN 70 AND 130))
ORDER BY ItemX ASC
LIMIT 50

请注意,我已将GROUP BY替换为ORDER BY。这是您现在需要知道的全部内容,但您需要记住GROUP BY做的事情与分组完全不同。

答案 3 :(得分:0)

如上所述,删除群组,但也取消限制,您应该看到您要搜索的内容。它们分别限制和缩小您的结果集,使其无法看到您想要的结果。