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

SQL多表关联查询:关联MARKET与MARKET_UPDATES获取最新记录

解决MARKET与MARKET_UPDATES关联获取最新价格的重复问题

你遇到的重复问题根源在于子查询的分组和关联逻辑没对齐——你在子查询里按main_key和sub_key分组,但只返回了max_id和fk_main_key,漏掉了sub_key,导致关联时只靠main_key匹配,一个main_key下的多个sub_key会重复关联,自然就出现了大量重复行。

要实现**基于main_key+sub_key组合匹配,获取最新价格(对应MARKET_UPDATES中ID7-12的记录)**的需求,我们需要调整子查询,把sub_key也纳入分组和返回字段,确保每个唯一的(main_key, sub_key)组合只对应一条最新的更新记录。

正确的SQL语句

SELECT m.*, mu.price, mu.update
FROM market m
JOIN (
    -- 先获取每个(main_key, sub_key)组合对应的最新更新记录ID
    SELECT MAX(id) AS max_id, main_key, sub_key
    FROM market_updates
    GROUP BY main_key, sub_key
) m_max 
    ON m.main_key = m_max.main_key 
    AND m.sub_key = m_max.sub_key  -- 必须同时匹配sub_key,避免重复
JOIN market_updates mu 
    ON mu.id = m_max.max_id;

逻辑解释

  1. 子查询m_max:按main_key和sub_key分组,找出每个组合下的最大id(你的MARKET_UPDATES里ID越大的记录更新时间越晚,ID7-12是比1-6更新的记录),同时返回分组的main_key和sub_key,保证后续关联的唯一性。
  2. 关联MARKET表:通过main_key和sub_key两个字段同时匹配,确保MARKET里的每条记录(每个(main_key, sub_key)组合)只关联到对应的最新更新记录。
  3. 关联MARKET_UPDATES表:通过子查询得到的max_id,直接关联到最新的那条价格记录,获取对应的price和update时间。

最终效果

这条SQL会准确返回MARKET表的所有记录,以及每个记录对应的最新价格(也就是MARKET_UPDATES中ID7-12的那些数据),不会出现重复行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:22:38