2012-12-18 66 views
5

我在INNER JOIN子查詢的where子句中遇到問題。我收到一個未知列錯誤M.idMembre。我試過使用表名而不是別名,但我得到同樣的問題。我也嘗試從子查詢中刪除WHERE子句,並在子查詢之後的ON子句中添加此條件。但是,我遇到了同樣的問題。我覺得這是顯而易見的,我錯過了這裏。子查詢中的未知列where子句

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

您似乎沒有使用任何連接標準,內部連接... ON ... –

+0

我也嘗試過使用常規INNER JOIN格式,但是我收到了與此列相同的錯誤。 'SELECT DISTINCT M.idMembre,couponsTypes.maxCouponType FROM membres爲M INNER JOIN(SELECT MAX(coupons.idType)AS maxCouponType FROM券) AS couponsTypes ON M.idMembre = coupons.idMembre ORDER BY maxCouponType DESC' – oliboon

+0

使用優惠券表的別名也給我一個未知的列問題。 – oliboon

回答

7

你不允許引用外部表的子查詢聯接子句。解決方法之一是在做基於連接條件的子查詢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中引用了它,但它等價於優惠券類型表中的成員標識。因此,您可以將您的查詢寫爲:

 SELECT idMembre, MAX(coupons.`idType`) AS `maxCouponType` 
     FROM coupons 
     group by idmembre 
     order by 2 desc 

這可能是最簡單和最有效的方式。

+0

如果成員在'membre'表中是非唯一的,那麼查詢之間是否有區別?我無法理解這一點,但我只是從一個相當嘔吐的午餐會回家...... – eggyal

+0

@eggyal。 。 。在這種情況下,實際上沒有區別。 'distinct'刪除重複項。我不會那樣寫查詢,但沒有區別。 –

+0

關於'membres'的好處也是不必要的。 – eggyal

1

您的子查詢無權訪問外部查詢中的表。也就是說,membres表(別名爲M)在評估couponsTypes子查詢時不可用。

但是,在這種情況下,這樣的子查詢不是必需的;你只需要直接連接表和組結果:

SELECT idMembre, MAX(coupons.idType) AS maxCouponType 
FROM  membres JOIN coupons USING (idMembre) 
GROUP BY idMembre 
ORDER BY maxCouponType DESC