0

関係:

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));

私が繰り返し発生するエラーは、「エラー1054(42S22):「フィールドリスト」の不明な列「価格」」です。

4

2 に答える 2

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

しかし、これは遅くなり、おそらく不要です。

を取得できませんでしたwhere price < all。price desc で注文し、最初のレコードのみを取得すると、最も高い価格のレコードのみが取得されます。

于 2012-04-05T15:33:05.057 に答える
0

サブセレクトで max() 関数をエイリアスする必要があります。

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

基本的に、サブクエリを使用してその場でテーブルを作成しているため、技術的には外側のクエリは次のようにする必要があります

SELECT model, MAX(MAX(price))
                  ^^^^^^^^^^--- field name in subselects

これは実際には機能しません。サブクエリから返されないフィールド名 (価格) に対して、二重の MAX() 呼び出しを実行しています。

于 2012-04-05T15:26:55.253 に答える