Oracle SQL如何保留table1全量行并关联追加table2的id列
Oracle SQL 实现表合并方案
要实现保留table1所有行,并在name匹配时追加table2的id字段,用**左连接(LEFT JOIN)**是最直接的方案——它会完整保留左表(table1)的所有记录,仅将右表(table2)中匹配到的id值关联过来,未匹配的id字段会显示为NULL。
基础查询实现
SELECT t1.name, t1.age, t1.weight, t1.height, t2.id FROM table1 t1 LEFT JOIN table2 t2 ON t1.name = t2.name;
特殊场景处理
如果table2中存在同一name对应多个id的情况,上述查询会返回多条重复的table1记录(对应不同的id)。若希望每个table1记录仅保留一个id(比如取最大/最小id),可以用聚合函数配合GROUP BY:
SELECT t1.name, t1.age, t1.weight, t1.height, MAX(t2.id) AS id -- 或MIN(t2.id),按需选择 FROM table1 t1 LEFT JOIN table2 t2 ON t1.name = t2.name GROUP BY t1.name, t1.age, t1.weight, t1.height;
生成新表
如果需要将结果直接生成一张新表,而非仅查询,可以在语句前添加CREATE TABLE:
CREATE TABLE target_table AS SELECT t1.name, t1.age, t1.weight, t1.height, t2.id FROM table1 t1 LEFT JOIN table2 t2 ON t1.name = t2.name;
内容的提问来源于stack exchange,提问作者honeymoon
相关产品推荐
相关产品推荐

