精华内容
下载资源
问答
  • 找出两张表中不匹配的记录

    千次阅读 2007-02-15 11:17:00
    前面说了找出两张表匹配的记录,这里接着讲找出两张表中不匹配的记录。还是以前面的AB为例。从A中找出B没有的记录,与从B中找出A没有的记录,结果是不一样。我下面的记载,是使用SQL时不同的尝试,...

    前面说了找出两张表中匹配的记录,这里接着讲找出两张表中不匹配的记录。还是以前面的A表B表为例。从A表中找出B表没有的记录,与从B表中找出A表没有的记录,结果是不一样。

    我下面的记载,是使用SQL时不同的尝试,有些得出正确答案,有些没有,但可以分析一下为什么是这样一个答案。以找出"A表中B没有匹配项的记录"为例:

    1、是Access的"Find Unmatched Query Wizard"生成的。
    SELECT A.*  FROM A LEFT JOIN B ON A.ID = B.ID  WHERE (B.ID Is Null);

    注意在Access中,返回的查询下部有新增记录空白行。
    找出B表中A没有匹配项的记录,把上面语句中A、B对调。

    2、SELECT A.* FROM A LEFT JOIN B ON A.ID = B.ID WHERE (A.ID Not In (B.ID));

    这样写跟上面是一个意思,LEFT JOIN后,B.ID一部分是Null,一部分跟A.ID一样。A.ID Not In (B.ID)排除了跟B一样的ID,就是B.ID为Null的部分。注意在Access中,返回的查询下部有新增记录空白行。

    3、SELECT A.* FROM A  WHERE ((A.ID) Not In (select B.ID from B));

    这里用到了子查询,表达很简洁。注意在Access中,返回的查询下部有新增记录空白行。

    4、SELECT A.*  FROM A, B  WHERE ((A.ID) Not In (B.ID));
    这样写结果是不对的,返回的记录数量相当大。经过分析,返回的记录内容和记录数量都是可以预测的。这个表达中,A和B没有建立关系。它们的比较方式如下:A表中所有记录跟B表中第一条记录比较,不一样的就返回(即使会跟B表中后面的记录一样);接下来,A表中所有记录跟B表中第二条记录比较,不一样的就返回(即使跟B表中第一条记录匹配);以此类推,直到B表最后一条记录。
    可以按如下思路推导公式:总的比较次数为 A总记录数×B总记录数。跟据如上比较方法,A表在跟B表中相同记录比较时,每次会扣掉相同的一项,总的扣掉数就是相同记录数。
    因此公式为:A总记录数×B总记录数-相同记录数

    注意在Access中,返回的查询下部没有新增记录空白行。

    5、SELECT A.* FROM A,B  WHERE ((A.ID) Not In (select B.ID from B));
    注意跟3的不同,FROM后面多了个B表,返回的不同记录内容是对的,但是重复了很多遍,重复遍数是B表的记录数。5中表达方法做了3中表达方法做的事,但是有个B表在那里,指针就要在B表从头到尾移动一遍,From后面的B是画蛇添足。
    注意在Access中,返回的查询下部没有新增记录空白行。

    4和5不同在哪里呢,B.ID是一个数,(select B.ID from B)是一组数。在4中,A表记录跟一个数逐一比较后出结果,在5中,跟一组数比较后出结果,返回的不同值当然是不一样的。

    展开全文
  • 找出两张表匹配的记录

    千次阅读 2007-02-15 02:57:00
    工作中要维护一张,这张表根据另一个部门发过来的Excel文件更新。每次发过来的Excel文件跟我当前的相比,或者多了几条... 把我维护的称为A,Excel文件导入的称为B,我的工作包括个目标,一是根据B
    工作中要维护一张表,这张表根据另一个部门发过来的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中,返回的查询下部有新增记录空白行。
     
    展开全文
  • 下面用oracle数据库进行测试,假设使用这,192.168.2.2服务器上用户test1LEGAL_CASE,192.168.2.3服务器上用户test密码123456LEGAL_CASE。 需求:只需改动源库192.168.2.2服务器上的,目标库192.168....

    下面用oracle数据库进行测试,假设使用这两个表,192.168.2.2服务器上用户test1表LEGAL_CASE,192.168.2.3服务器上用户test密码123456表LEGAL_CASE。

    需求:只需改动源库192.168.2.2服务器上的表,目标库192.168.2.3服务器上即可自动改变。

        条件:

            1.两个表能建立DB LINK,即两个数据库所在的服务器能互相ping通。

            2.两个表字段类型必须完全匹配,不能主表某字段能插入字符,而副表对应的某字段只能插入数字,不能主表字段插入的长度超过副表对应字段的最大长度。

    下面开始:建立DB LINK和触发器都是在192.168.2.2数据库

            1.建立DB LINK,首先判断登录的用户是否有创建DB LINK 的权限,执行以下语句:

                -- 查看 test1 用户是否有创建DB LINK 权限   

    select * from user_sys_privs where privilege like upper('%DATABASE LINK%') AND USERNAME='test1';

                如果能查询到结果,说明有权限创建DB LINK ,否则需要管理员角色创建权限(sys或system)

    grant create public database link to test1;

     也可以用SQL的方式创建: 

    -- Create database link 
    create public database link TEST_DBLINK
    connect to test2 identified by 123456
    using '192.168.2.3:1521/ORCL';

                建好DB LINK 后测试一下,看下是否连接上了

    SELECT * FROM LEGAL_CASE@TEST_DBLINK;

    2.建立好DB LINK 后,就可以写触发器了

    CREATE OR REPLACE TRIGGER "TEST_LEGAL_CASE" 
    AFTER INSERT OR UPDATE OR DELETE ON LEGAL_CASE
    FOR EACH ROW
    BEGIN
    CASE WHEN INSERTING THEN
         insert into LEGAL_CASE@TEST_DBLINK(ID,PERSON,CARNO,CREATE_DATE,PLACE,FILE_PATH,NOTES_PATH,STATE,APPLY_ID,SEX,IDCARD,CONTEXT,ADDRESS,CAR_TYPE,USER_ID,USER_NAME,CONTENT,START_DATE,END_DATE,MOBILE,COMPANY,JOB,USER_NO,RECOREDER,GOODS) 
         values(:NEW.ID,:NEW.PERSON,:NEW.CARNO,:NEW.CREATE_DATE,:NEW.PLACE,:NEW.FILE_PATH,:NEW.NOTES_PATH,:NEW.STATE,:NEW.APPLY_ID,:NEW.SEX,:NEW.IDCARD,:NEW.CONTEXT,:NEW.ADDRESS,:NEW.CAR_TYPE,:NEW.USER_ID,:NEW.USER_NAME,:NEW.CONTENT,:NEW.START_DATE,:NEW.END_DATE,:NEW.MOBILE,:NEW.COMPANY,:NEW.JOB,:NEW.USER_NO,:NEW.RECOREDER,:NEW.GOODS);
    WHEN UPDATING THEN
         update LEGAL_CASE@TEST_DBLINK set ID=:NEW.ID,PERSON=:NEW.PERSON,CARNO=:NEW.CARNO,CREATE_DATE=:NEW.CREATE_DATE,PLACE=:NEW.PLACE,FILE_PATH=:NEW.FILE_PATH,NOTES_PATH=:NEW.NOTES_PATH,STATE=:NEW.STATE,APPLY_ID=:NEW.APPLY_ID,SEX=:NEW.SEX,IDCARD=:NEW.IDCARD,CONTEXT=:NEW.CONTEXT,ADDRESS=:NEW.ADDRESS,
         CAR_TYPE=:NEW.CAR_TYPE,USER_ID=:NEW.USER_ID,USER_NAME=:NEW.USER_NAME,CONTENT=:NEW.CONTENT,START_DATE=:NEW.START_DATE,END_DATE=:NEW.END_DATE,MOBILE=:NEW.MOBILE,COMPANY=:NEW.COMPANY,JOB=:NEW.JOB,USER_NO=:NEW.USER_NO,RECOREDER=:NEW.RECOREDER,GOODS=:NEW.GOODS where ID=:OLD.ID;
    WHEN DELETING THEN
         delete from LEGAL_CASE@TEST_DBLINK where ID=:OLD.ID;
    END CASE;
    END;

     3.触发器建立好后,改动192.168.2.2服务器上的表,创建、修改和删除数据,都可在192.168.2.3服务器上中看到效果。

    update LEGAL_CASE set PERSON='更新测试1' where ID='10000521';
    delete from LEGAL_CASE  where ID='10000521';

     

    展开全文
  • !... ...如图所示,这大概就是数据,里面有五列数据 在另一个中,我有单独的一列数据用来作鉴别 只有数据中的值跟那一列数据中的值相同才属于正常 那么该如何筛选数据不正常的值呢?
  • 首先是两张xls,他们格式相同如: 然后新建Sheet3 因为我只对 数据进行处理所以在Sheet3中选择前两张表第一个数据出现的位置,即C3 使用IF函数: 在前两张表中选择C3位置 =IF(Sheet!C3<>Sheet1!C3,""&...

    首先是两张xls表,他们格式相同如:
    sheetSheet1然后新建Sheet3
    Sheet3因为我只对 数据进行处理所以在Sheet3中选择前两张表第一个数据出现的位置,即C3
    使用IF函数:
    在这里插入图片描述
    在前两张表中选择C3位置
    在这里插入图片描述在这里插入图片描述在这里插入图片描述=IF(Sheet!C3<>Sheet1!C3,""&Sheet!C3&"("&Sheet1!C3&")",""&Sheet!C3)
    其中的<>表示判断条件:Sheet表中的C3不等于Sheet1表中的C3
    逗号分隔,
    “”&Sheet!C3&"("&Sheet1!C3&")":中间这段表示条件成立则取值: Sheet表中C3的值(Sheet1表中C3的值)
    “”&Sheet!C3:最后这一段表示条件不成立则取值:Sheet表中C3的值

    下一步选中C3找到条件格式——>新建格式规则——>使用公式确定要设置格式的单元格——>填写条件——>选择字体格式——>确定
    在这里插入图片描述最后拉取其他数据就行
    在这里插入图片描述其他属性列复制粘贴即可这里不再演示。

    展开全文
  • 两张表a(药品编码,产品名称,药品类别,通用名),b(drugcode,drugname,drugalis,drugunit),如何将两张表部分字段对应起来,并导入b
  • SQL两张表筛选相同数据和不同数据

    千次阅读 2019-03-15 17:43:00
    原文链接: ... 方法一: select distinct A.ID from A where A.ID not in ...--不同数据 select tel_no from b except select tel_no from a 转载于:https://www.cnblogs.com/87060524test/p/10538545.html
  • 方法一: select distinct A.ID from A where A.ID not in (select ID from B) 方法二: ...select A.ID from A left join B on A.ID=B.ID ...--不同数据 select tel_no from b except select tel_no from a
  • A字段: 类型、一月、二月。。。。十二月 交通费、100、200。。。。1200 电话费、100、200.。。。。1200 B字段: 月份、类型、金额 1 、交通费、500 2 、电话费、500 最终数据库更改A字段相同月份下类型相同的...
  • 我使用的SQL server 2008 目前有 两表示意图如下: !... !...其中第一个的数据量在...所以小弟就像问一下,有没有其他办法可以把第一个中的tag按照lat和lng双字段匹配到第二个的tag上。 急用,求救 谢谢!
  • Oracle两张表关联更新的多种方式

    千次阅读 2019-07-25 09:04:20
    模拟AA(ID,NAME_A,DEPT_A) 模拟BB(ID,NAME_B,DEPT_B) 1.update单个字段(注意Oracle与其他数据库不一致,需要多限制一个条件,否则将不匹配的都刷为null) update AA a set a.NAME_A = (select b....
  • a,e两张表的字段是一样的,只是数据有不同(有的为空等),且ab的字段是用代码来显示的,要通过bcd匹配显示成中文名称,ae的所有满足条件并按条件来排序显示,用了union连接,查询的结果总少了!求解!!! ...
  • mysql使用技巧之比较是否有不同的数据

    万次阅读 热门讨论 2018-07-05 16:19:24
    在数据迁移中,我们经常需要比较,以便在一个中标识另一个中没有相应记录的记录。 例如,我们有一个新的数据库,其架构与旧数据库不同。...使用以下步骤比较,并确定不匹配的记录,按着常用的...
  • MySQL中主与副的区别,级联操作的运用 划重点: 1 被约束的称为副,约束别人的称为主,外键设置在副上的。 2 主被参考的字段通常都设置为主键 3 当有外键约束的时候,添加数据的顺序:先加主...
  • 比如有两张数据:table1,table2 table1结构: id num 1 1000 2 700 3 1300 4 1500 5 2000 table2结构: id num 1 500 2 2000 3 500 如何使用sql实现在这两个匹配查询数据,或者其他方法: ...
  • oracle数据库中批量把一张里面的数据插入到不同中的方法
  • 个系统用的是不同的用户,用户在一个系统改了密码后,在平台中进入其他系统会出现密码错误,为了让数据及时更新,所以用数据库触发器让两表同步更新。 下面用oracle数据库进行测试,假设使用这,主T_...
  • 两张表,字段名也不同 字段gs 和另一张 gsmc 的有些值是相同的 我们要做的就是把这个相同的值找出来 会写这个sql语句就可以 只写重点 $sql2 = " select gs from yixiangkh where gs in (select gsmc from ...
  • MySql将一张的数据插入另外一张

    千次阅读 2018-04-18 14:15:31
    table_a,table_b,现在要将b中的几个字段值插入a,且两张表字段名字不同 insert into table_a(user, pwd, score) select username user, password pwd, score from table_b....
  • 我们在用excel表格获取数据时会通过不同的渠道获取到有关联的数据,再将数据存储到mysql中,此时就要为数据标记Id,那么当数据庞大的时候如何将相关联的表格自动建立Id呢?这就需要用到excel的功能了——vlookup步骤...
  • 功能:查询A中字段v与B中字段m不重复的记录并去除重复 sql语句: select distinct v from A where not exists(select DISTINCT m from B where A.v=B.m) A: B:
  • VLOOKUP函数语法规则如下...1.如下图:我们想把匹配二,在这之前我们已经做个对照,一的FID对应 二的FID_bin_1k 我们可以看到二并不是按照顺序排列的,所以我们要将一的MEAN按照FID匹配二mean...
  • 为了从数据库导出数据直接生成excel,为了客户对比数据使用,根据条件查找并去重等众多艰难险阻,不断百度和查看大量操作方式和实验得出这么几条经验,拿出来给大家分享一下,如果有哪里不对或者探讨请联系我,在...
  • 使用opencv查找两张图片不同的部分

    万次阅读 多人点赞 2017-11-02 23:52:00
    有一款游戏叫《大家一起来找茬》不知道大家有没有玩过,就是给出2相似图片,在规定的时间内找出图片上有几处不同并标记出来。本文将介绍如何通过opencv替代肉眼快速找出准确的答案。 材料准备 通过搜索引擎,找...
  • Opencv查找两张图片不同的部分以及图片中特定的像素替换 Opencv识别两张图片的不同部分demo: import cv2 import numpy as np from matplotlib import pyplot as plt import argparse def matchAB(fileA, fileB): ...
  • 这是中数据 ![图片说明](https://img-ask.csdn.net/upload/201605/24/1464060516_756237.png) 我用下面这种方法 select * from ((select * from SFFX_JGJPZ_DETAIL d where d.jgjpz_id=1) o), ((select * from ...
  • 突发发现了这个前所未有的错误“in field list is ambiguous”,也网上百度了一下,现在百度这个问题的解决方法不难,但是它也折射处理一个很严重的问题,我们在项目开发前期设计数据库时,如果两张表中存在关联...
  • MOM(根据原始数据建立起的视图),这里假设这两张表的结构完全一样(事实上可以不一样,只需第一个要更新的字段能匹配第二个的字段,且两张表唯一索引对应即可,例如根据唯一id,对两张表其他字段进行匹配更新)...
  • 在这里,INNER JOIN(内连接,或等值连接):取得中存在连接匹配关系的记录。 例如我要取到table1和table2之中 age1和age2相同的结果并且结合起来: SELECT * FROM table1 INNER JOIN table2 ON table1.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 158,745
精华内容 63,498
关键字:

不同的两张表如何匹配