我的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子句
答案 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)
如上所述,删除群组,但也取消限制,您应该看到您要搜索的内容。它们分别限制和缩小您的结果集,使其无法看到您想要的结果。