0

尝试从以下链接完成 MySQL 中的 Northwind 示例数据库的练习。

http://laerer.rhs.dk/andersb/basicprog/database/exercises/northwindselect.htm

问题“使用 SUBQUERY...从表products中找到最小的unitPrice。使用此价格查找具有最低价格的产品的productIDproductName。” 让我有点困惑。

以下查询

    SELECT ProductID, ProductName 
    FROM products 
    ORDER BY UnitPrice
    LIMIT 1;

似乎产生了正确的答案,但不使用 SUB QUERY。这是从另一列具有 MIN/MAX 值的行生成字段的标准做法吗?即不使用聚合函数MIN()/ MAX()

我猜这种方法在计算上会很昂贵;让 DBMS 在打印第一行之前对表进行排序。SUB QUERY 或任何其他方法会更有效吗?也许使用适当的聚合函数而不是ORDER BY. 如果是这样,我应该使用什么查询?

4

1 回答 1

0

您的方法会找到一种价格最低的产品。如果有不止一个,那么你就错过了它们。

因此,更通用的解决方案是使用类似于您的查询的内容作为子查询:

select p.*
from products p join
     (SELECT UnitPrice
      FROM products 
      ORDER BY UnitPrice
      LIMIT 1
     ) pmin
     on p.UnitPrice = pmin.UnitPrice;

实际上,子查询更常见的写法是:

     (SELECT min(UnitPrice)
      FROM products 
     ) pmin

两者都产生相同的答案。

于 2014-01-26T16:25:34.687 回答