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
相关产品推荐
相关产品推荐

