如何基于ID合并两张SQL表的同意值,生成指定结构结果表
解决思路与SQL实现
要实现将两个表的同意值按ID合并,核心是使用全外连接(FULL OUTER JOIN),它能保留两个表中所有的ID记录,当某ID只在其中一张表存在时,另一张表的对应字段会自动填充为NULL,完全匹配你的需求。
最终SQL语句
SELECT COALESCE(a.id, b.id) AS id, a.consent_value AS a_consent_value, b.consent_value AS b_consent_value FROM table_a a FULL OUTER JOIN table_b b ON a.id = b.id ORDER BY id;
关键说明
- FULL OUTER JOIN:确保
table_a和table_b中的所有ID都被包含,不会遗漏任何一方的记录 - COALESCE(a.id, b.id):当ID只在其中一张表存在时,另一张表的
id会是NULL,用这个函数取非空的ID作为结果表的id字段 - 字段别名:将两个表的
consent_value分别命名为a_consent_value和b_consent_value,对应结果表的要求 - ORDER BY id:按ID排序让结果更规整,可选但建议加上
兼容方案(针对不支持FULL OUTER JOIN的数据库,如MySQL)
如果你的数据库不支持全外连接,可以先用UNION收集所有唯一ID,再分别左连接两个表:
SELECT combined.id, a.consent_value AS a_consent_value, b.consent_value AS b_consent_value FROM (SELECT id FROM table_a UNION SELECT id FROM table_b) AS combined LEFT JOIN table_a a ON combined.id = a.id LEFT JOIN table_b b ON combined.id = b.id ORDER BY combined.id;
测试结果
代入你的表数据后,执行上述SQL会生成你期望的结果:
id a_consent_value b_consent_value 111 Y Y 222 Y N 333 N NULL 444 NULL N 555 NULL N
内容的提问来源于stack exchange,提问作者Johnny T
相关产品推荐
相关产品推荐

