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;
逻辑解释
- 子查询
m_max:按main_key和sub_key分组,找出每个组合下的最大id(你的MARKET_UPDATES里ID越大的记录更新时间越晚,ID7-12是比1-6更新的记录),同时返回分组的main_key和sub_key,保证后续关联的唯一性。 - 关联MARKET表:通过
main_key和sub_key两个字段同时匹配,确保MARKET里的每条记录(每个(main_key, sub_key)组合)只关联到对应的最新更新记录。 - 关联MARKET_UPDATES表:通过子查询得到的
max_id,直接关联到最新的那条价格记录,获取对应的price和update时间。
最终效果
这条SQL会准确返回MARKET表的所有记录,以及每个记录对应的最新价格(也就是MARKET_UPDATES中ID7-12的那些数据),不会出现重复行。
内容的提问来源于stack exchange,提问作者Skooou
相关产品推荐
相关产品推荐

