2011-09-06 6 views
2

이 질문은 매우 간단한 질문입니다. 너무 간단해서 당혹 스러울 것입니다. 비용을 개의치 않고, 나는 잠시 동안 이것을 파악하려고 노력하고 있었고, 그래서 나는 지혜롭게 끝까지 지냈다. 다음은 자동차 제조업체 (예 : Toyota) 및 자동차 모델 (예 : Prius, Sienna)을 사용하는 시나리오입니다.내부 조인 SQL 쿼리 (죄송합니다. 간결하게 설명하는 방법을 모르겠 음)

SELECT * FROM car_manufacturer man 
INNER JOIN car_model cm ON cm.manufacturerid = man.manufacturerid 

간단하고 맞습니까?

이제 부울을 true로 설정 한 각 제조업체의 행을 반환하고 싶습니다 (car_manufacturer.is_awesome). 하나 이상의 모델을 만듭니다.

select count (*)를 사용하여 하위 쿼리를 사용하려고하지만이 값을 계산할 수 없습니다.

도와주세요!

+0

? 즉 제조업체 정보 만 모든 모델이 아니라고 할 수 있습니다. 또한 모델은 어떻게 차별화됩니까? 이름으로? –

답변

1

이 시도 : 당신은 그냥 반이 참여하고있는

SELECT * 
    FROM car_manufacturer man INNER JOIN 
     (
     SELECT manufacturerid 
      FROM car_model 
     GROUP BY manufacturerid 
     HAVING COUNT(1) > 1 
     ) cm 
    ON cm.manufacturerid = man.manufacturerid 
    AND man.is_awesome = 1 
4
SELECT man.* 
FROM car_manufacturer man 
WHERE is_awesome = 1 
     AND manufacturerid IN (SELECT manufacturerid 
          FROM car_model 
          GROUP BY manufacturerid 
          HAVING COUNT(DISTINCT model_name/*whatever*/) > 1) 
+0

+1 - 'IN'이 'INNER JOIN'보다 빠를 것이라고 – JNK

+0

@JNK - 네. [다행히 OP는 MySQL에 없다] (http://stackoverflow.com/questions/3417074/why-would-an-in-condition-be-slower-than-in-sql/3417190#3417190) –

0
SELECT man .manufacturerid 
From car_manufacturer man INNER JOIN car_model car ON man.manufacturerid = car.manufacturerid 
AND is_awesome = 1 
Group by (car .manufacturerid) 
HAVING COUNT(car .manufacturerid) > 2 
관련 문제