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

如何基于advices表的advisor_type关联多表查询对应顾问姓名

实现方案

你可以通过以下两种常用方式实现需求,不需要动态判断SELECT字段:

方法1:LEFT JOIN + COALESCE 关联查询

这是最推荐的写法,不会丢失advices表的任何记录,逻辑简洁易维护:

SELECT 
  a.id,
  a.advisor_id,
  a.advisor_type,
  COALESCE(e.lastname, f.lastname) AS lastname,
  COALESCE(e.firstname, f.firstname) AS firstname
FROM advices a
-- 仅当顾问类型为expert时关联expert表
LEFT JOIN expert e 
  ON a.advisor_id = e.id AND a.advisor_type = 'expert'
-- 仅当顾问类型为friend时关联friend表
LEFT JOIN friend f 
  ON a.advisor_id = f.id AND a.advisor_type = 'friend'

逻辑说明:关联时已经通过advisor_type过滤了不匹配的行,所以非对应类型的关联表字段都会返回NULL,COALESCE函数会自动取两个参数里第一个非空的值,正好匹配你要取对应类型名称的需求。

方法2:UNION ALL 分场景拼接结果

如果两类顾问的查询逻辑差异较大,也可以分开查询后拼接结果集:

-- 查询expert类型的记录
SELECT 
  a.id,
  a.advisor_id,
  a.advisor_type,
  e.lastname,
  e.firstname
FROM advices a
INNER JOIN expert e ON a.advisor_id = e.id
WHERE a.advisor_type = 'expert'

UNION ALL

-- 查询friend类型的记录
SELECT 
  a.id,
  a.advisor_id,
  a.advisor_type,
  f.lastname,
  f.firstname
FROM advices a
INNER JOIN friend f ON a.advisor_id = f.id
WHERE a.advisor_type = 'friend'
-- 按原advices的id排序,和原表顺序一致
ORDER BY id

注:你给出的期望结果中第4条记录的firstname为笔误,对应expert表id=8的firstname实际为Brad,上述SQL执行后会返回正确值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:24:06