You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Product与Prices表关联获取ID、ID_Forn及最低Price?

解决方案

要获取每个Product ID对应的最小Price及对应的ID_Forn,你可以通过以下两种常见方法实现:

方法一:使用窗口函数(推荐,逻辑清晰)

通过ROW_NUMBER()窗口函数为每个Product ID的价格按升序排序,标记出最小价格的那条记录,再与Product表关联:

SELECT 
    P.ID,
    PP.ID_Forn,
    PP.Price AS Min_Price
FROM Product P(NOLOCK)
LEFT JOIN (
    SELECT 
        ID,
        ID_Forn,
        Price,
        -- 按ID分组,价格升序排序,最小价格的记录标记为rn=1
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Price ASC) AS rn
    FROM Prices(NOLOCK)
) PP ON P.ID = PP.ID AND PP.rn = 1

说明:

  • 用LEFT JOIN保证即使Product表中没有对应Prices记录(比如ID3、4),也能返回该Product的ID,对应的ID_Forn和Min_Price会显示为NULL
  • 如果同一个Product ID存在多个相同的最小Price,此方法只会返回其中一条(排序后第一条),若要返回所有符合条件的记录,可将ROW_NUMBER()替换为RANK()

方法二:先聚合最小价格再关联

先通过分组查询得到每个Product ID的最小价格,再关联Prices表找到对应的ID_Forn:

SELECT 
    P.ID,
    PP.ID_Forn,
    MinPrices.Min_Price
FROM Product P(NOLOCK)
LEFT JOIN (
    -- 先获取每个ID的最小价格
    SELECT ID, MIN(Price) AS Min_Price
    FROM Prices(NOLOCK)
    GROUP BY ID
) MinPrices ON P.ID = MinPrices.ID
-- 关联回Prices表找到对应最小价格的ID_Forn
LEFT JOIN Prices PP(NOLOCK) ON MinPrices.ID = PP.ID AND MinPrices.Min_Price = PP.Price

说明:

  • 若同一个Product ID存在多个相同的最小Price,此方法会返回多条记录(所有符合最小价格的条目),如需去重可添加DISTINCT关键字

原查询的问题

你之前的查询使用了标量子查询,这类子查询只能返回单个值,因此无法同时获取ID_Forn字段。上述两种方法通过关联查询或多列子查询,解决了这个限制。

内容的提问来源于stack exchange,提问作者Nuno Monteiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 17:08:27