如何比较两个表访问sql

时间:2014-03-28 20:19:58

标签: sql ms-access

我有两个具有相同no.of列和相同列名的表,列的数据类型彼此相同,但其中一个表将有一些额外的记录。我如何找到这些。

表1

        Name     Description       EID  

       name1      ssdad          1001
       name2      gfd            1002
       name3      gfdsffsdf      1003

表2

        Name     Description       EID  

       name1      ssdad          1001
       name2      gfd            1002
       name3      gfdsffsdf      1003
       name2      gfd12344       1002
       name3      gfdsffsdf      1003
       name5      gfd            1002
       name6      gfdsffsdf      1003

如何在查询中指定

2 个答案:

答案 0 :(得分:3)

通过访问查询向导解决查询要求

SQL是这种情况下的最佳途径。我尝试查看内置的ACCESS数据库功能,因为很可能大多数人都会以Access数据库生态系统的方式发现认为。无论如何,展示一个Access UI友好的设计方法可能会很好......

这是我的两张表及其样本数据:

表1 :(有更多记录)

Find Unmatched Data Query in Access: Sample Table 1

表2:

Find Unmatched Data Query in Access: Sample Table 2

有一个向导设计一个类似于OP请求的查询对象:

Access: Find Unmatched Query Wizard Option

选择进一步修改设计,但会发现一个限制:给定的表关系不能定义超过两个最大连接数。 OP的三列示例不满足于额外的工作。

Find Unmactched Query Joins

通过子查询的替代方法

三列等连接的备用转换是一个连接字符串,表示单个列中的所有三个列值。这将克服连接限制。我创建了Query1Query2,它们分别从Table1Table2中选择了所有列,第三列由以下Access DB表达式构建器定义:

 -- For Query1:
 [Table 1]![Name_Col] + [Table 1]![Description_Col] + Str( [Table 1]![EID] )     


 -- For Query2:
 [Table 2]![Name_Col] + [Table 2]![Description_Col] + Str( [Table 2]![EID] )     

应用相同的向导,但加入Query1Query2除了从三个原始数据列派生的新COMPOSITE KEY值。

Joining Sub Query Results on Composite Join Key Value

最终结果:

Find Unmatched Results Between Tables

因此Access数据库用户有自己的本地方法来设置操作和数据操作。既然在响应中发布了SQLACCESS db方法,可以对每种方法如何分解手头的问题进行一些比较分析。享受!

答案 1 :(得分:2)

在表2中找到额外的内容:

select 
   *
from
  table1 t1
  left join table2 t2 on t1.name = t2.name 
                     and t1.description = t2.description 
                     and t1.eid = t2.eid
where
  t1.name is null