我在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
如果您需要更多信息,请与我们联系。
答案 0 :(得分:13)
不允许在join子句中引用子查询中的外部表。解决此问题的一种方法是根据连接条件在子查询中执行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
表。虽然在外部select
中引用,但它相当于优惠券类型表中的成员ID。因此,您可以将查询编写为:
SELECT idMembre, MAX(coupons.`idType`) AS `maxCouponType`
FROM coupons
group by idmembre
order by 2 desc
这可能是最简单,最有效的方式。
答案 1 :(得分:1)
您的子查询无权访问外部查询中的表。也就是说,membres
表(别名为M
)在评估couponsTypes
子查询时不可用。
但是,在这种情况下,不需要这样的子查询;您只需要直接连接表并将结果分组:
SELECT idMembre, MAX(coupons.idType) AS maxCouponType
FROM membres JOIN coupons USING (idMembre)
GROUP BY idMembre
ORDER BY maxCouponType DESC