Mysql SQL内部联接顺序问题

Mysql SQL内部联接顺序问题,mysql,sql,group-by,sql-order-by,Mysql,Sql,Group By,Sql Order By,我试图从数据库中排序我的选择,结果是错误的。我在试着订购ASC。这是我的选择代码: SELECT b.product_id, a.file_destination FROM images AS a INNER JOIN product_images AS b WHERE a.image_id = b.image_id GROUP BY b.product_id ORDER BY b.order ASC 有了这个,我得到了某种随机顺序。有什么想法吗?b.order不在组中。它也没有聚合功能。因

我试图从数据库中排序我的选择,结果是错误的。我在试着订购ASC。这是我的选择代码:

SELECT b.product_id, a.file_destination
FROM images AS a 
INNER JOIN product_images AS b
WHERE a.image_id = b.image_id
GROUP BY b.product_id
ORDER BY b.order ASC

有了这个,我得到了某种随机顺序。有什么想法吗?

b.order
不在
组中。它也没有聚合功能。因此,这是不应该被允许的。格式正确的查询更像这样:

SELECT pi.product_id, MAX(i.file_destination)
FROM images i INNER JOIN
     product_images pi
WHERE i.image_id = pi.image_id 
GROUP BY pi.product_id
ORDER BY MAX(pi.order) ASC;

好的,我想我找到了解决办法。最后的代码是:

SELECT b.product_id, a.file_destination
FROM images AS a 
INNER JOIN product_images AS b
ON a.image_id = b.image_id
WHERE b.order = 1
GROUP BY b.product_id

对连接条件使用
ON
而不是
WHERE
来编写正确的SQL。我也尝试了,但没有解决问题。“b.order”的类型是什么?此列是否包含空值?GROUP BY无效,在较旧的MySQL版本中将返回不可预测的结果,在新版本中将引发错误(除非处于兼容模式)。常规GROUP BY规则说明:如果指定GROUP BY子句,选择列表中的每个列引用必须标识分组列或是集合函数的参数!你到底想要实现什么?您按产品分组,因此每个产品有一行,然后按“订单”订购,但一个产品可能有多个不同的“订单”。您是否试图获得每个产品的第一张图片?这样做是不可能的,因为聚合发生在ORDER BY之前。我认为
ORDER
也应该在backticks中,或者使用表表示法就可以了?@草莓。它返回每个产品列的最大值。根据ANSI SQL:当GROUP BY时,ORDER BY子句中只允许选择列表项。尝试按删除订单,看看会发生什么。@jarlh。通常,可以使用聚合函数包含任何表达式。