我需要找到公司(CompanyName)提供的产品(ProductName),其名称'开头为字母'a'和'g',然后显示最便宜的产品(UnitPrice)。我试图找到答案,但似乎无法正确解决-我似乎只是找到整体的最小值,而不是已经选择的产品的最小值。我非常感谢您的帮助和一些解释!
仅根据公司名称选择产品的代码:
SELECT
'The cheapest' ttype,
p.ProductName,
s.CompanyName,
c.CategoryName,
p.UnitPrice
FROM
dbo.Products p
INNER JOIN
dbo.Categories c
ON
c.CategoryID = p.CategoryID
INNER JOIN
dbo.Suppliers s
ON
s.SupplierID = p.SupplierID
WHERE
SUBSTRING(CompanyName, 1, 1) > 'a' and SUBSTRING(CompanyName, 1, 1) < 'g'
尝试:
AND
UnitPrice = (
SELECT
MIN(UnitPrice)
FROM
Products
)
和:
NOT EXISTS (SELECT 1 FROM Products pr WHERE pr.UnitPrice < p.UnitPrice)
并且使用SELECT TOP 1 [...] ORDER BY UnitPrice Asc,但是(!)我稍后需要进行联合(也选择最昂贵的产品),显然ORDER BY与UNION不兼容。
很抱歉,如果代码不是最好的-我是SQL新手。谢谢您的时间!
尽管还有其他方法,但您正在寻找的是相关子句:
UnitPrice = (SELECT MIN(p2.UnitPrice)
FROM Products p2
WHERE p2.ProductName = p.ProductName
)
AND
UnitPrice = (
SELECT
MIN(UnitPrice)
FROM
dbo.Products p
INNER JOIN
dbo.Categories c
ON
c.CategoryID = p.CategoryID
INNER JOIN
dbo.Suppliers s
ON
s.SupplierID = p.SupplierID
WHERE
SUBSTRING(CompanyName, 1, 1) > 'a' and SUBSTRING(CompanyName, 1, 1) < 'g'
)
)