如何在SQLite中仅将两表完全匹配的城市项插入新表对应列
SQLite实现方案
你要的效果可以直接用**左连接(LEFT JOIN)**实现,左连接的特性就是保留左表所有行,右表匹配不到的对应字段自动返回NULL,刚好符合你的需求,完整操作步骤如下:
- 直接用
CREATE TABLE ... AS SELECT语法一步生成目标新表,无需单独先建表再插入数据 - 关联条件设置为两张表的城市字段完全等值匹配即可
完整SQL语句
-- 把下方的「目标新表名」替换成你自己要的新表名称即可 CREATE TABLE 目标新表名 AS SELECT A.City_fromTblA, B.City_fromTblB FROM 表A A LEFT JOIN 表B B ON A.City_fromTblA = B.City_fromTblB;
执行后结果验证
最终生成的新表数据和你预期完全一致:
| City_fromTblA | City_fromTblB |
|---|---|
| Delhi | NULL |
| Mumbai | Mumbai |
| Kolkatta | Kolkatta |
| Agra | Agra |
| Noida | Noida |
| Mathura | NULL |
可选优化场景
- 如果需要自定义新表的字段类型、约束,可以先手动执行
CREATE TABLE语句定义好表结构,再用INSERT INTO 目标新表名 SELECT ...的写法插入数据,SELECT部分的逻辑和上面完全一致 - 如果表B中存在重复的城市值,左连接会产生重复行,此时可以先对表B的城市字段去重再关联,调整关联部分的写法即可:
LEFT JOIN (SELECT DISTINCT City_fromTblB FROM 表B) B ON A.City_fromTblA = B.City_fromTblB
内容的提问来源于stack exchange,提问作者classy_BLINK
相关产品推荐
相关产品推荐

