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

MySQL关联3张表且不合并行的查询方案咨询

解决MySQL多表UNION后FK列拆分的问题

我来帮你搞定这个查询问题~你的需求是把t2和t3中关联t1.id=1的记录分别单独列出,对应另一边的字段填充NULL,同时让fk只保留一列对吧?

你之前的语句用SELECT *会把t2和t3的所有字段都包含进来,包括各自的fk列,所以UNION ALL之后就会出现两个独立的fk列,不符合预期。我们只需要明确指定每个查询返回的字段,让两边的字段结构完全一致,就能合并成你想要的结果了。

优化后的查询语句

SELECT 
    t2.id AS t2_id,
    NULL AS t3_id,
    t2.fk,
    t2.val1,
    NULL AS val2
FROM t2
WHERE t2.fk = 1

UNION ALL

SELECT 
    NULL AS t2_id,
    t3.id AS t3_id,
    t3.fk,
    NULL AS val1,
    t3.val2
FROM t3
WHERE t3.fk = 1;

逻辑说明

  1. 第一部分查询:从t2中筛选出fk=1的记录,手动指定t3_id和val2为NULL,同时保留t2的id、fk和val1。
  2. 第二部分查询:从t3中筛选出fk=1的记录,手动指定t2_id和val1为NULL,保留t3的id、fk和val2。
  3. UNION ALL:因为两个查询返回的字段数量、顺序和数据类型完全匹配,合并后就会得到你期望的结果,并且fk列只会出现一次。

执行这个语句后,输出结果会和你想要的完全一致:

t2_id  t3_id  fk  val1  val2
1      NULL   1   123   NULL
2      NULL   1   234   NULL
NULL   1      1   NULL  345
NULL   2      1   NULL  456

如果后续需要关联t1表(比如要确保fk确实存在于t1中),可以在每个SELECT里加上JOIN t1 ON t2.fk = t1.id和JOIN t1 ON t3.fk = t1.id,不过根据你提供的数据,当前语句已经足够满足需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:22:27