2012-12-18 3 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 형식으로 시도했지만이 열에 대해 동일한 오류가 발생합니다. M은 INNER (쿠폰 FROM maxCouponType AS MAX (coupons.idType 해당)) 참여함에'maxCouponType DESC' – oliboon

+0

BY membres FROM M.idMembre = coupons.idMembre ORDER ON couponsTypes AS 를 DISTINCT M.idMembre, couponsTypes.maxCouponType 를 선택 쿠폰 테이블에 대한 별칭을 사용하면 알 수없는 열 문제가 발생합니다. – oliboon

답변

7

: 당신은 단지 직접 테이블을 조인 및 그룹 결과를해야합니다. 당신이 전혀 membres 테이블이 필요하지 않습니다,

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 

그러나 :이 문제를 해결하는 한 가지 방법은 가입 조건에 따라 서브 쿼리에서 group by을하는 것입니다. 외부 select에서 참조되었지만 쿠폰 유형 테이블의 구성원 ID와 같습니다. 따라서 다음과 같이 쿼리를 작성할 수 있습니다.

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

이것은 아마도 가장 간단하고 효율적인 방법입니다.

+0

'membre' 테이블에서 멤버가 고유하지 않은 쿼리의 차이점은 무엇입니까? 그 중 하나의 주위에 내 머리를 얻을 수 없다,하지만 난 그냥 오히려 boozy 오찬에서 집에있어 ... – eggyal

+0

@eggyal. . . 이 경우에는 실제로 차이가 없습니다. 'distinct'는 중복을 제거합니다. 그런 식으로 쿼리를 작성하지는 않지만 차이점은 없습니다. –

+0

'membres'에 대한 좋은 지적이 너무 필요합니다. – eggyal

1

하위 쿼리는 외부 쿼리의 테이블에 액세스 할 수 없습니다. 즉 couponsTypes 하위 쿼리를 평가할 때 테이블 (M이라는 별칭)을 사용할 수 없습니다.

그러나이 경우에는 이러한 하위 쿼리가 필요하지 않습니다. 당신은 조인 절에 하위 쿼리에서 외부 테이블을 참조 할 수 없습니다

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