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

我不断收到的错误是“ERROR 1054 (42S22): Unknown column 'price' in 'field list'”

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

编辑:根据您的评论扩展答案

好吧,前面的查询结果是一个元组。如果您只指一个字段/属性/列,那么您应该这样做:

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. 如果您按价格降序订购并且只获得第一个记录,您将只能获得最高价格记录。

于 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 回答