如何从两个表中查找重复项以及查找重复项?

时间:2013-01-28 06:41:31

标签: sql ms-access ms-access-2003

我在Access 2003中创建了这个语句

  SELECT COUNT(*)
  FROM TABLEA
  WHERE NOT EXISTS(SELECT * FROM TABLEB);

此语句是否有助于检查表A中的记录是否与表b相同? TABLEA是表b的新表,我想确保表b中的所有记录都在表A中。

其次我有这张桌子TABLEC。如何在TABLEC中检查是否存在重复记录,这意味着所有字段值都相同?

2 个答案:

答案 0 :(得分:4)

答案是:不,你的查询没有意义。

要判断两个记录是否“相同”,您必须定义术语“相等”。所有领域都应该相等吗?或者只是某些领域?

如果您有两个表TableATableB并且它们有两个字段'A'和'B',那么此语句将查找两个表中存在的所有记录:

select distinct TableA.* 
  from TableA 
       join TableB 
         on TableA.A = TableB.A 
        and TableA.B = TableB.B

或者

select * 
  from TableA
 where exists (
     select 1 
       From TableB 
      where TableA.A = TableB.A 
        and TableA.B = TableB.B
     )

编辑:用户10e5x指出他的表包含NULL值。因此,每个字段的比较必须更复杂一些,以补偿NULL比较警告。

我将给出WHERE部分:

where TableA.A = TableB.A or coalesce (TableA.A, TableB.A) is NULL 
  and TableA.B = TableB.B or coalesce (TableA.B, TableB.B) is NULL

函数coalesce(a,b,c...)返回最左边的非NULL值,因此

coalesce (A,B) is NULL
-- is equal to
A is NULL and B is NULL

注意:这种棘手的编码是您应该避免在用于比较的列中使用NULL值的原因。

答案 1 :(得分:-3)

试试这个

SELECT documentno 来自TableA 相交 SELECT documentno 来自TableB