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

如何编写SQL查询语句关联3张表获取每个成员的所有手机及PC端消息

实现思路

  • 先对齐phone_message和pc_message两张消息表的字段结构,通过UNION合并为统一的消息集合,补充标识区分消息来源
  • 再将合并后的消息集合与member表关联,匹配对应成员信息,最终输出每个成员的全量消息

可用SQL语句

SELECT
  m.id AS member_id,
  m.cell_num,
  merged_msg.content,
  merged_msg.msg_time,
  merged_msg.msg_source
FROM member m
INNER JOIN (
  -- 整合手机端接收的消息
  SELECT
    mem.id AS bind_member_id,
    pm.content,
    pm.received_at AS msg_time,
    '手机端接收' AS msg_source
  FROM phone_message pm
  INNER JOIN member mem ON pm.phone_num = mem.cell_num
  UNION ALL
  -- 整合PC端发送的消息
  SELECT
    pcm.member_id AS bind_member_id,
    pcm.content,
    pcm.sent_at AS msg_time,
    'PC端发送' AS msg_source
  FROM pc_message pcm
) merged_msg ON m.id = merged_msg.bind_member_id
-- 按成员ID+消息时间排序,方便查看单个成员的消息时序
ORDER BY m.id, merged_msg.msg_time;

补充说明

  • 这里用UNION ALL而非UNION,是因为两个消息表不存在重复数据场景,UNION ALL执行效率更高,如果你有去重需求可直接替换为UNION
  • 如果你需要保留没有任何消息的成员记录,可把外层的INNER JOIN替换为LEFT JOIN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:06:08