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

MySQL如何合并列名不同的两张表以得到指定查询结果

问题原因

你用UNION达不到预期是因为UNION是纵向合并结果集,要求前后两个查询的字段数量、字段类型完全匹配,你的写法会把product_state_1和product_state_2的结果合并到同一列输出,和你需要的横向关联两个字段的需求完全不符。

你需要的是包含两个表所有id_product的全外连接效果,但MySQL原生不支持FULL OUTER JOIN语法,所以可以用以下两种方案实现:

方案1:先聚合所有id再左关联(更简洁,推荐)

先通过UNION拿到两个表所有不重复的id_product,再分别左关联两个表取对应的状态值即可:

SELECT 
    t.id_product,
    t1.product_state_1,
    t2.product_state_2
FROM (
    SELECT id_product FROM TABLE_1
    UNION
    SELECT id_product FROM TABLE_2
) t
LEFT JOIN TABLE_1 t1 ON t.id_product = t1.id_product
LEFT JOIN TABLE_2 t2 ON t.id_product = t2.id_product;

这个方案逻辑清晰,可读性高,数据量不大的情况下性能足够。

方案2:左连接+右连接合并

也可以用左连接结果和右连接结果去重合并的方式实现:

SELECT t1.id_product, t1.product_state_1, t2.product_state_2
FROM TABLE_1 t1
LEFT JOIN TABLE_2 t2 ON t1.id_product = t2.id_product
UNION
SELECT t2.id_product, t1.product_state_1, t2.product_state_2
FROM TABLE_1 t1
RIGHT JOIN TABLE_2 t2 ON t1.id_product = t2.id_product;

两种方案的执行结果都和你预期的输出完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 08:51:02