打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
找出两张表中匹配的记录
找出两张表中匹配的记录
 
工作中要维护一张表,这张表根据另一个部门发过来的Excel文件更新。每次发过来的Excel文件跟我当前的表相比,或者多了几条记录,或者少了几条记录。减少的记录我不用删除,因为我的表是个历史记录,新增的记录我要添加到表里面去。从近千条记录里找出新增的项目,靠人工是不现实的,要用SQL语句完成这项工作。
 
把我维护的表称为A表,Excel文件导入的表称为B表,我的工作包括两个目标,一是根据B表更新A表中相关的记录,另一个是把B表中有而A表中没有的记录添加到A表中。在工作中对SQL语言又获得了一些经验,这里把它记录下来。虽然我要做的事是找出两张表中不同的记录,我的经验先从找出匹配的记录开始。
 

表A: ID(Primary Key)  Name     表B: ID(Primary Key)  Name
         01               北京                      01               北京
         02               上海                      02               上海
         03               天津                      04               杭州
         04               杭州                      05               广州
         06               成都
我尝试了Select语句不同的表达方法,虽然结果相同,但背后的逻辑是不太一样的。

1、SELECT A.ID, A.Name  FROM A INNER JOIN B ON A.ID=B.ID;

感觉这个写法比较简洁,INNER JOIN 帮你把相同的记录筛选出来了,我只是把我要的字段列一下。
注意在Access中,返回的查询下部有新增记录空白行。

2、SELECT A.ID, A.Name  FROM A, B WHERE (A.ID=B.ID);

我分析下来,这样写相当于自己在完成 INNER JOIN的工作。详细的步骤应该是:A中全部记录跟B中第一条记录逐一对比,找到相符的就记录下来;A中全部记录再跟B中第二条记录逐一对比,相符的记录下来;如此类推,直到B表的最后一条记录。
注意在Access中,返回的查询下部“没有”新增记录空白行。
 
3、SELECT A.ID, A.Name FROM A, B WHERE A.ID in (B.ID);
注意在Access中,返回的查询下部“没有”新增记录空白行。
 
4、SELECT A.ID, A.Name FROM A  WHERE A.ID in (select B.ID from B);
这里用到了“子查询”。注意在Access中,返回的查询下部有新增记录空白行。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SQL:JOIN ON
MySQL连接查询
MySQL 之 多表连接查询及子查询
图解SQL各种join和union
mysql从一张表查出数据存到另一张表和inner join的用法
Oracle SQL语句(连接查询)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服