子查询where子句中的未知列

时间:2012-12-18 21:26:28

标签: mysql subquery

我在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 

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

2 个答案:

答案 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
相关问题