精华内容
下载资源
问答
  • 标题起得有点长,不过我要把文章主题表达的精确点。...我工作维护的,虽然都有主键,但是很多主键是自动生成的,并不能保证实际意义上的数据没有重复值。举例说,有张“Student”,主键类型是“AutoNum

     标题起得有点长,不过我要把文章主题表达的精确点。我的测试环境是Access 2003,操作对象是单一的表,目标是要把某个字段含有重复项的记录找出来。围绕这个目标再展开谈点相关的SQL语句。在两张表里查找匹配记录的方法我在另一篇日志记载过

    我工作中维护的表,虽然都有主键,但是很多主键是自动生成的,并不能保证实际意义上的数据没有重复值。举例说,有张“Student”表,主键类型是“AutoNumber”。不用名字作主键,是因为中国人重名的很多。但是不时的,我需要看看有哪些名字重复出现,判断一下到底是真的两个人呢还是不留神把同一个人输了两遍。

    先看一下数据样本:表名 Student

    ID  Name City  Address
    1 包彦钦  北京  北京市东四北大街520号
    2 王洪涛  北京   北京市西单北大街151号
    3 张立涛   大连   大连市西岗区新开路69号
    4 佘高峰  济南  山东省济南市泺文路50号
    5  徐俊  上海  上海市静安区南阳路46号
    6  张忠飞  上海   上海市肇嘉浜路414号
    7  徐俊   上海   上海市乳山路150号

    Access 2003提供了“查找重复项查询向导”(Find Duplicates Query Wizard),可以很方便的帮你达成目标,这个向导的说明文字是这样的:This wizard creates a query that finds records with duplicate field values in a single table or query.
    这个向导的使用方法网上有很多文章说过了,我就不再赘述。推荐MS官方网站的一篇:在 Access 中查找并删除重复记录。(这篇文章读起来有点拗口,可能是翻译的。)

    我关心的是得出结果的SQL语句,比如要查找重复的名字,用向导生成的SQL语句是这样的:

    SELECT student.Name, student.City, student.Address
    FROM student
    WHERE (((student.Name) In (SELECT [Name] FROM [student] As Tmp GROUP BY [Name] HAVING Count(*)>1 )))
    ORDER BY student.Name;

    结果是:

      Name   City   Address
     徐俊 上海 上海市乳山路150号
     徐俊 上海 上海市静安区南阳路46号

    分析下这条SQL语句。这里用了子查询“select name from student group by name having count(*)>1”。这个子查询的意思是:把student表里的记录按名字组合在一起,并把组合后数量大于1的记录返回。就这个例子而言,这条子查询的返回值只有一行——“徐俊”。

    接下来,我们用“徐俊”这个值替换原来的子查询,原来的SQL语句就可以简化成:
    SELECT Name, City, Address FROM student
    WHERE(Name  In ("徐俊")) ORDER BY Name;

    Order By 的好处是在记录很多的时候,把相同的名字排在一起,便于比较其它的字段。比如比较“徐俊”的城市和地址,猜想他可能是搬家了,也可能就是两个人。

    上面是讲如何把有重复值的记录列出来,如果想列出没有重复值的记录的话,在上面的基础上加个“Not”。

    SELECT Name, City, Address FROM student
    WHERE ( Name Not  In (SELECT [Name] FROM [student] GROUP BY [Name] HAVING Count(*)>1 ))
    ORDER BY Name;

    把所有记录看成全集U,重复和不重复把全集分成不相交的两部分,子查询得出有重复项的子集A,not A就是A的补集,就是不重复的那部分。

    有的时候,某个字段有重复记录是正常的,比如上例中的城市,我们可以用city做准则,列出有不止一个学员的城市以及学员信息,或列出只有一个学员的城市和学员信息。

    SELECT City, Name, Address FROM student
    WHERE ( City In (SELECT [city] FROM [student] GROUP BY [city] HAVING Count(*)>1 ))
    ORDER BY City; (列出不止一个学员的城市和学员信息)

    拓展一下,列出有两个以上学员的城市和学员信息:

    SELECT City, Name, Address FROM student
    WHERE ( City In (SELECT [city] FROM [student] GROUP BY [city] HAVING Count(*)>2 ))
    ORDER BY City;

    补充:Access 查询同一张表中两个或以上字段含有重复项的记录

    展开全文
  • oracle表数据同步 merge语法

    千次阅读 2016-12-16 09:44:55
    简介 MERGE语句是SQL语句的一种。在SQL ...通过MERGE语句,根据一张表(原数据表,source table)或子查询的连接条件对另外一张(目标表,target table)表进行查询,连接条件匹配上的进行UPDAT

    简介

    MERGE语句是SQL语句的一种。在SQL ServerOracle数据库中可用,MySQL、PostgreSQL中不可用。MERGE是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表(原数据表,source table)或子查询的连接条件对另外一张(目标表,target table)表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。

    语法

    merge into  T_TABLE_2 t                                                              //命名T_TABLE_2表 别名 t
    using (select ID,NAME,PWD from T_TABLE_1) s                       //using子句提供merge操作的数据源表T_TABLE_1,命名s
    on (t.NO = s.ID)                                                                             //on子句指定合并的条件 (这里是两个表的主键)

    when matched then                                                                    //on子句中的条件成立
      update set                                                                                  //修改语句
      t.NAME = s.NAME,t.PWD=S.PWD                                              //写上要修改的列值
     
    when not matched then                                                             //on子句中的条件不成立
      INSERT (t.NO, t.NAME,t.PWD) VALUES (s.ID, s.NAME,s.PWD) //将数据源中的数据添加进来

    使用发法对照

    现将T_TABLE_1表中的数据复制到T_TABLE_2 表中 其中各表都有三列(表结构可以不同  指定列即可)

    展开全文
  • STATA横向数据匹配

    千次阅读 2020-10-30 19:44:47
    目标:把公司的数据和到一张表上 我在国泰安上下载了A股上市公司2008-2016年的某些数据,要做描述性统计和相关性分析,但数据合并对我来说是个问题。先后尝试了excel的vlookup函数,奈何自己技术不过关,数据量又大...
    • 目标:把公司的数据和到一张表上
      我在国泰安上下载了A股上市公司2008-2016年的某些数据,要做描述性统计和相关性分析,但数据合并对我来说是个问题。先后尝试了excel的vlookup函数,奈何自己技术不过关,数据量又大(1.9万条),过程中excel容易卡,匹配结果大部分为空,当时什么都不会,有点想人工匹配了,迷之工作量。因为一些原因,我这一学期才接触数据库,技术也不行,给同组同学诉苦,他说,可以用数据库帮我合并,几条语句,很快。
      没过一会儿,他就合并好,发给了我。我真的万分感谢,觉得离作业完成只差一步之遥,数据全有了,只差计算了。并感叹数据库的神奇,暗下决心好好学习数据库!
      过来一段时间,我计算指标时,发现里面缺了几年的数据,但里面已经有2.7万条数据。在合并过程中,有很多重复数据(例如,某几个个案,里面仅有1,2个不同的属性)。我刚学习了左外连接,让他帮我左外连接的,他说,左外连接的结果很奇怪,会出现很多奇怪的东西。我怕数据量暴增,就重新跟他交代了每张表之间数据匹配的依据,结果出来的数据还是少了几年的,导致里面一个指标无法计算。

    • 转机
      在第二天课中,偶然发现stata可以做纵向和横向数据匹配,并询问了老师,她给我说,一对一,多对多,1对多(在横向数据匹配中),我后来查询了,但不是很清楚。就直接用代码上手了(参考的stata教程是人大刘传波老师的书),测试数据很成功,感叹轻便的stata如此好用!(测试过程在merge后面直接加了两个匹配依据,就是他们两个合在一起和本数据对应的上时,才把属性和数据内容放到右边)

    • 示例代码

    use 利润表.dta,clear 
    sort 证券代码 会计期间
    save 利润表.dta,replace  //排好序的数据替换原来的数据
    
    use 资产负债表.dta,clear
    sort 证券代码 会计期间
    save 资产负债表.dta,replace 
    
    merge 证券代码 会计期间 using  利润表
    tab _merge //显示对接情况,3 表示成功对接, 1 和 2 表示未成功对接
    //本次结果显示全部为3,就是都完全匹配,所以可以直接删除_merge
    drop _merge
    save 利润表和资产负债表.dta
    

    代码大概就这样,记得两个表的排序都要做,特别是“母”表的排序千万不要省略,我之前以为在上一次合并中已按照这两个属性排好序了,就不用再排了,可程序报错了。
    稍微解释一下关联的两个属性,也就是merge后面的“证券代码”和“会计期间”。如果熟悉国泰安数据库,会对这两个变量比较敏感,“证券代码”代表公司;“会计期间”代表统计的时间,对于财务指标的话,按季度统计的,所以要想唯一确定某个个案,就要看这两个属性值,类似于数据库中的主键。

    展开全文
  • 首先将需要匹配数据匹配范围都放到同一张表里,然后在空格位置写VLOOKUP函数 搜索目标选择你要匹配的目标,列范围选择你的匹配的范围,如E1:G194,如果想要范围不变,则在其前面加上'$'符号,如$E$1:$G$194,...

    当在excel表格中填写数据,我们希望从一堆数据里面实现自动匹配时,这时我们可以用到VLOOKUP函数

    首先将需要匹配的数据和匹配范围都放到同一张表里,然后在空格位置写VLOOKUP函数


    搜索目标选择你要匹配的目标,列范围选择你的匹配的范围,如E1:G194,如果想要范围不变,则在其前面加上'$'符号,如$E$1:$G$194,返回列编号选择你要返回的数据是你所选择的范围中的第几列,如3,表示返回第三列中匹配到的数据,最后一项选择精确匹配即可。



    下拉,则得到更多结果。

    展开全文
  • 它们是非常强大的工具,可用于查询层次结构数据,而您事先不知道必须将多少次联接回到同一张表。 这可能是最常见的用法。 但是,它们也可以用于执行各种操作,包括但不限于:基于数量字段创建n行,从字段提取多个...
  • Hibernate实战(第2版 中文高清版)

    热门讨论 2013-03-19 22:45:46
     5.1.1 每个带有隐式多态的具体类一张表   5.1.2 每个带有联合的具体类一张表   5.1.3 每个类层次结构一张表   5.1.4 每个子类一张表   5.1.5 混合继承策略   5.1.6 选择策略   5.2 Hibernate类型系统...
  • 顺序查找的查找过程为:从表中的最后一个数据元素开始,逐个记录的关键字做比较,如果匹配成功,则查找成功;反之,如果直到表中第一个关键字查找完也没有成功匹配,则查找失败 同时,在程序中初始化创建查找表时...
  • MySQL

    2021-06-06 21:07:17
    左/右外连接 :返回第一/二张表的所有行,和第二/一张表匹配行 编写SQL语言习惯 筛选条件常用主键、别名列(自相关)判断 子句通常放在select和筛选条件,常简化from,避免重复行 常见错误 no unique table
  • SQL的小测

    2018-11-30 16:42:55
    SQL小测 今天博主面试了字节跳动的商业分析岗。面试官手动出了一个SQL的小测试,当场博主没有做出来。面试完了复盘一下。 题面:有两列数据,用户...其次,在同一张表中匹配出下一次用户登录的时间,并计算出两次时...
  • 简单的说就是在实际生活,当我们查询某些数据的时候,一张表不可能为我们提供足够多的数据,其次在数据库的设计的时候,考虑到表的结构和复杂性,会设计多张分类表,以合理的处理形类似的数据信息。 2.在Mysql...
  • Excel新增工具集

    2011-12-20 09:30:27
    本工作簿中有若干格式相同的表,为了便于观察各表相同位置数据的变化,可以首先用鼠标选定要观察的区域,然后执行本命令,则各工作表的位置区域数据集中排列到一个表中,并自动标注该数据来自何表。 4、表头...
  • BGP④——MPLS①

    2019-08-09 10:20:43
    ** 一、出现背景 ** MPLS是一种多协议标签交换技术,和帧中继...后来思科提出了CEF的概念,将原有的路由表中数据转换为FIB,已经完成递归,可以被芯片直接调用,然后再产生一张ADJ将出接口信息和ARP进行结合直...
  • 求写一条sql语句?

    2010-07-20 23:51:35
    一张数据表pages(id,title,body,url,site)用一条sql语句查询出title或body或url含有字符'test',先匹配title,其次是body,最后才是url,且一条记录只能显示一次。请问这条sql语句怎么写?
  • 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据, 然后才可以删除主表的数据。还有一种就是级联删除子表数据。 注意:外键约束的参照列,在主表中引用的只能...
  • BGP之MPLS

    千次阅读 2019-08-05 17:45:24
    文章目录一、出现背景二、MPLS工作过程三、配置 一、出现背景 MPLS是一种多协议标签交换技术,和...后来思科提出了CEF的概念,将原有的路由表中数据转换为FIB,已经完成递归,可以被芯片直接调用,然后再产生一张A...
  • 在使用组合索引时,若组合索引为(name,email),单独索引email时不走索引,这称为最左前缀匹配原则,最左匹配原则,mysql会一直向右匹配知道遇到(< > between like)这一类的范围查询时停止 explain + sql查询语句,...
  • 实例035 使用嵌套循环在控制台上输出九九乘法 实例036 用while循环计算1+1/2!+1/3!…1/20! 实例037 for循环输出空心的菱形 实例038 foreach循环优于for循环 实例039 终止循环体 实例040 循环体的过滤器 实例...
  • 实例035 使用嵌套循环在控制台上输出九九乘法 实例036 用while循环计算1+1/2!+1/3!…1/20! 实例037 for循环输出空心的菱形 实例038 foreach循环优于for循环 实例039 终止循环体 实例040 循环体的过滤器 实例...
  • 实例035 使用嵌套循环在控制台上输出九九乘法 实例036 用while循环计算1+1/2!+1/3!…1/20! 实例037 for循环输出空心的菱形 实例038 foreach循环优于for循环 实例039 终止循环体 实例040 循环体的过滤器 实例...
  • 实例035 使用嵌套循环在控制台上输出九九乘法 实例036 用while循环计算1+1/2!+1/3!…1/20! 实例037 for循环输出空心的菱形 实例038 foreach循环优于for循环 实例039 终止循环体 实例040 循环体的过滤器 实例...
  • 实例035 使用嵌套循环在控制台上输出九九乘法 实例036 用while循环计算1+1/2!+1/3!…1/20! 实例037 for循环输出空心的菱形 实例038 foreach循环优于for循环 实例039 终止循环体 实例040 循环体的过滤器 实例...
  • 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发...
  • 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发...
  • 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发...
  • 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发...
  • MySQL命令大全

    2018-01-15 11:19:17
    7、修改表中数据:update 表名 set 字段=新值,…where 条件 mysql> update MyClass set name=’Mary’where id=1; 7、在表中增加字段: 命令:alter table 表名 add字段 类型 其他; 例如:在表MyClass中添加了...
  • 日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体...
  • 经典SQL语句大全

    热门讨论 2014-12-20 12:00:30
    因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引) 14、说明:前10条记录 select top 10 * form table...

空空如也

空空如也

1 2 3 4
收藏数 61
精华内容 24
关键字:

同一张表中匹配数据