2012-04-05 2 views
0

관계는 :MySQL 최고가 제품의 모델 번호를 찾으십시오.

Product(maker, model, type) 
Laptop(Model, price, speed, ram, hd, screen) 
PC(model, price, speed, ram, hd) 
Printer(model,price, color, price) 

나는 가장 높은 가격으로 제품의 모델 번호를 찾기 위해 노력하고있다.

내가 시도하는 것 :

-> SELECT model, MAX(price) FROM 
-> ((SELECT model, MAX(price) FROM product NATURAL JOIN pc) 
-> union 
-> (SELECT model, MAX(price) FROM product NATURAL JOIN printer) 
-> union 
-> (SELECT model, MAX(price) FROM product NATURAL JOIN laptop)); 

내가 점점 계속 오류는 "ERROR 1054 (42S22) : '필드 목록'에서 알 수없는 열 '가격'"

답변

0

당신은 최대의 별명 필요 부속 선택에서() 함수 :

SELECT model, MAX(price) 
FROM (
    SELECT model, MAX(price) AS price ... 
          ^^^^^^^^^ 
    etc... 

당신은 기본적으로 너무 tecnically 외부 쿼리가

가 될 것이다, 하위 쿼리와 함께 즉석에서 테이블을 만들
SELECT model, MAX(MAX(price)) 
        ^^^^^^^^^^--- field name in subselects 

실제로 작동하지 않습니다. 하위 쿼리에서 반환되지 않은 필드 이름 (가격)에 대해 double MAX() 호출을 수행하고 있습니다.

0

해당 쿼리는 작동하지 않습니다. 나는 이것이 당신이 쿼리 주어진 찾고있는 무슨 생각 :

(SELECT model, price FROM product NATURAL JOIN pc) 
union all 
(SELECT model, price FROM product NATURAL JOIN printer) 
union all 
(SELECT model, price FROM product NATURAL JOIN laptop) 
ORDER BY price DESC 
LIMIT 1 

편집 : 의견

음, 한 튜플의 이전 쿼리의 결과를 바탕으로 답을 확장. 필드/속성/열을 하나만 사용한 경우 다음을 수행해야합니다.

SELECT model from (
    (SELECT model, price FROM product NATURAL JOIN pc) 
    union all 
    (SELECT model, price FROM product NATURAL JOIN printer) 
    union all 
    (SELECT model, price FROM product NATURAL JOIN laptop) 
) final 
ORDER BY price DESC 
LIMIT 1 

그러나이 작업은 느려지고 불필요한 작업 일 수 있습니다.

나는 where price < all을 얻지 못했습니다. 가격 할인으로 주문하고 첫 번째 레코드 만받는 경우 가장 높은 가격의 레코드 만 받게됩니다.

+0

나는 최고급 제품의 모델 번호를 가진 하나의 튜플로 단지 하나의 관계를 반환하려고합니다. 그래서 위의 쿼리를() 안에 캡슐화 한 다음 SELECT 모델을 [위 쿼리] WHERE price

관련 문제