10

我的 INNER JOIN 子查询的 where 子句有问题。我收到一个未知的列错误M.idMembre。我尝试使用表名而不是别名,但我遇到了同样的问题。我还尝试从子查询中删除 WHERE 子句,并在子查询之后的 ON 子句中添加此条件。但是,无论哪种方式,我都有同样的问题。我觉得这很明显我在这里失踪了。

SELECT DISTINCT M.`idMembre` ,  `couponsTypes`.`maxCouponType` 
FROM membres AS  `M` 
INNER JOIN (
SELECT idMembre, MAX( coupons.`idType` ) AS  `maxCouponType` 
FROM coupons
WHERE coupons.`idMembre` = M.`idMembre` 
GROUP BY idMembre
) AS  `couponsTypes` 
ON M.`idMembre` = couponsTypes.`idMembre`
ORDER BY maxCouponType DESC 

如果您需要更多信息,请与我们联系。

4

2 回答 2

19

不允许在连接子句的子查询中引用外部表。解决此问题的一种方法是group by根据连接条件在子查询中执行:

SELECT DISTINCT M.`idMembre`, `couponsTypes`.`maxCouponType`
FROM membres AS `M` 
INNER JOIN
(SELECT idMembre, MAX(coupons.`idType`) AS `maxCouponType`
   FROM coupons
   GROUP BY idmembre
) `couponsTypes`
ON couponstypes.idMembre = M.idMember
ORDER BY maxCouponType DESC

但是,你根本不需要这张membres桌子。虽然在 external 中引用了select,但它相当于coupons type 表中的member id。因此,您可以将查询编写为:

SELECT idMembre, MAX(coupons.`idType`) AS `maxCouponType`
FROM coupons
GROUP BY idmembre
ORDER BY 2 DESC

这可能是最简单和最有效的方式制定。

于 2012-12-18T21:36:36.697 回答
2

您的子查询无权访问外部查询中的表。也就是说,在评估子查询时,membres表(别名为M)不可用。couponsTypes

但是,在这种情况下不需要这样的子查询;您只需要直接加入表格并将结果分组:

SELECT   idMembre, MAX(coupons.idType) AS maxCouponType
FROM     membres JOIN coupons USING (idMembre)
GROUP BY idMembre
ORDER BY maxCouponType DESC
于 2012-12-18T21:35:07.433 回答