具有MIN()的MySQL不返回最小值
我运行的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
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
运行上面的查询将返回我的id47215
,我期望的是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语句应该在编写时抛出一个错误。我会说,这就是我需要的!这是多么简单啊!