2012-04-05 14 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 

編集:コメント

まあ、1組の前のクエリの結果に基づいて回答を拡大します。あなただけの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 

しかし、これは遅く、おそらくunnecesaryになります。

私はwhere price < allを取得しませんでした。あなたが価格descで注文し、最初のレコードのみを取得する場合は、最高価格のレコードを取得します。

+0

私は、最も高価な製品のモデル番号を持つ1つのタプルでただ1つの関係を返そうとしています。だから私は上記のクエリを上記の()でカプセル化し、SELECTモデルから行うことができます[上記のクエリ] WHERE価格<すべて; ? –

関連する問題