具有MIN()的MySQL不返回最小值

具有MIN()的MySQL不返回最小值,mysql,Mysql,我运行的MySQL查询无法满足我的要求。从产品图像列表中,我需要获得订单最少的图像。我正在使用下面的查询来执行此操作: SELECT id FROM media WHERE media.productgroup_id = 102 AND media.product_id= 902 AND media.type = 0 HAVING MIN(media.order) 数据库表media包含: id | productgroup_id | product_id | order | type

我运行的MySQL查询无法满足我的要求。从产品图像列表中,我需要获得订单最少的图像。我正在使用下面的查询来执行此操作:

SELECT id FROM media
WHERE media.productgroup_id = 102
AND media.product_id= 902
AND media.type = 0
HAVING MIN(media.order)
数据库表
media
包含:

id    | productgroup_id | product_id | order | type
47215 | 102             | 902        | 2     | 0
47216 | 102             | 902        | 1     | 0
47217 | 102             | 902        | 3     | 0 
运行上面的查询将返回我的id
47215
,我期望的是
47216
。因此它返回的是最小id,而不是最小顺序


我犯了什么错误?

顺序下单
并取第一个元素

SELECT id 
FROM media
WHERE media.productgroup_id = 102
AND media.product_id= 902
AND media.type = 0
order by media.order asc
limit 1

having
用于您未构建的组。

如果您的条件比min更复杂,您也可以使用子查询来解决此问题。话虽如此,@jeurgen-d的回答可能比你的情况更快。我只想指出,剥这只猫皮的方法不止一种

SELECT id 
FROM media
    INNER JOIN (
        SELECT min(id) 
        FROM media 
        WHERE 
            media.productgroup_id = 102
            AND media.product_id= 902
            AND media.type = 0
    ) as m2 
    ON media.id = m2.id

您的查询没有意义,因为您使用的是分组功能,而没有对其进行分组。您缺少一个
分组依据
,以及一个将
MIN(media.order)
的结果与某物(例如
具有MIN(media.order)=10
)进行比较的条件。其他数据库管理系统都会简单地拒绝您的查询。@MySQL是RDBMS中的PHP,它允许您做一些奇怪的事情:-)MySQL是一只奇怪的鸟,它允许无意义的SQL通过,并实际给出这样的结果。不幸的是,您的SQL语句应该在编写时抛出一个错误。我会说,这就是我需要的!这是多么简单啊!