在此代码中,我们要求特定供应商的产品的最低价格,但我不明白为什么我们必须为外部查询设置别名。
QUERY 1: - 返回UnitPrice最小的所有记录。
SELECT SupplierID
,ProductName
,UnitPrice
FROM Products
WHERE UnitPrice = (
SELECT MIN(UnitPrice)
FROM Products
WHERE SupplierID = Products.SupplierID
)
QUERY 2: - 返回每个供应商的最低价格记录。
SELECT SupplierID
,ProductName
,UnitPrice
FROM Products AS p1
WHERE UnitPrice = (
SELECT MIN(UnitPrice)
FROM Products
WHERE SupplierID = p1.SupplierID
)
这段代码是递归的吗?
我正在使用Northwind示例数据库。
答案 0 :(得分:1)
在第一个中,子查询中的supplierID指的是子查询的Products表,它没有引用外部表。因此,执行一次以获得所有供应商ID中的最小单价。这基本上是一个嵌套的子查询。
在第二个中,子查询使用p1.supplierID引用外部查询,因此将在外部查询中为每个supplierID执行子查询。它将获得每个供应商的最低单价。这是一个相关的子查询。
答案 1 :(得分:1)
QUERY 1: - 返回UnitPrice
最小全部 UnitPrice
SELECT SupplierID
,ProductName
,UnitPrice
FROM Products
WHERE UnitPrice = (
SELECT MIN(UnitPrice)
FROM Products
WHERE SupplierID = Products.SupplierID
)
您可以从子查询中完全删除WHERE SupplierID = Products.SupplierID
,因为它对您的最终结果没有影响。
以这种方式思考(返回UnitPrice
= 1)的所有记录:
SELECT SupplierID
,ProductName
,UnitPrice
FROM Products
WHERE UnitPrice = ('1')
QUERY 2: - 返回每个供应商的最低价格记录。
SELECT SupplierID
,ProductName
,UnitPrice
FROM Products AS p1
WHERE UnitPrice = (
SELECT MIN(UnitPrice)
FROM Products
WHERE SupplierID = p1.SupplierID
)
可以这样想,"对于每个p1.SupplierID
(这是Products
表中的每个供应商),返回UnitPrice
所在的任何记录该特定供应商必须提供的最低价格"