You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Metabase关联查询构建求助:订单表关联企业关系表及联系人表需求

Metabase关联查询构建求助:订单表关联企业关系表及联系人表需求

嘿,我来帮你搞定这个多表关联的需求,不管你习惯写SQL还是用Metabase的可视化拖拽界面,都能轻松实现,咱们一步步来:

先理清楚核心逻辑

你要实现的其实是两步递进关联

  1. 从现有订单表出发,匹配企业关系表里「父公司ID和订单公司ID一致、且关系类型为代理(agent)」的子公司
  2. 再通过子公司ID,关联联系人表取出对应的姓名和邮箱信息

方案一:自定义SQL实现(灵活度拉满)

如果Metabase支持自定义SQL查询,直接用下面的语句就行,我给你加了详细注释:

SELECT
  -- 建议替换成你实际需要的订单字段,不用全选*,更高效
  eo.order_id,
  eo.order_date,
  eo.company_id,
  -- 联系人核心信息
  dc.first_name,
  dc.last_name,
  dc.email
FROM existing_orders eo
-- 第一步:关联企业关系表,锁定代理类型的子公司
LEFT JOIN company_relations cr
  ON eo.company_id = cr.parent_company_id
  AND cr.relation_type = 'agent' -- 把关系类型限定写在ON里,避免左连接失效
-- 第二步:通过子公司ID关联联系人表
LEFT JOIN dim_contact dc
  ON cr.child_company_id = dc.company_id

小细节调整:

  • LEFT JOIN是为了保留所有订单记录,哪怕没有找到对应代理联系人;如果只需要有联系人的订单,把LEFT JOIN换成INNER JOIN就行
  • 要是出现一条订单对应多条联系人的情况(比如一个父公司有多个代理子公司),可以在SQL里加DISTINCT,或者用GROUP BY按订单字段分组来处理重复数据

方案二:Metabase可视化界面操作(不用写SQL)

如果你更偏爱拖拽式的可视化查询,按下面的步骤操作:

  1. 打开Metabase新建查询,先选择existing_orders作为主表
  2. 点击顶部「加入数据」,选择company_relations表:
    • 关联条件设置为:existing_orders.company_id 等于 company_relations.parent_company_id
    • 接着给这个关联表加过滤:company_relations.relation_type 等于 agent(直接下拉选或手动输入带引号的'agent'
  3. 再次点击「加入数据」,选择dim_contact表:
    • 关联条件设置为:company_relations.child_company_id 等于 dim_contact.company_id
  4. 在左侧字段列表里,勾选dim_contactfirst_namelast_nameemail,加到结果列中
  5. 最后点击「运行」,就能看到带联系人信息的订单数据了

避坑提醒

  • 先确认三张表的ID字段类型一致!比如company_id要是数字就全是数字,要是字符串就全是字符串,类型不匹配会直接关联失败
  • 测试的时候建议先加个订单ID过滤(比如只看某一个订单),验证关联出来的联系人是不是你要的代理公司的,没问题再跑全量数据
  • 要是出现重复订单记录,大概率是一个父公司对应多个代理子公司,这时候可以用Metabase的「汇总」功能,按订单字段分组去重

要是还有特殊需求(比如要取每个子公司的最新联系人),随时说,我再帮你调整~

火山引擎 最新活动