【问题标题】:How to find duplicates from two tables and also to find duplicate in itself?如何从两个表中查找重复项并自身查找重复项?
【发布时间】:2013-01-28 06:41:31
【问题描述】:

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

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

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

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

【问题讨论】:

  • 改进你的标题,你的标题=“我有一个问题”
  • 抱歉已更改。这样可以吗?
  • 表 B 和表 A 具有完全相同的字段数和相同的含义。如果所有字段值都相同,则将其视为匹配,我不 uds 通用字段

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


【解决方案1】:

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

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

如果您有两个表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 值的原因。

【讨论】:

  • 是的,所有字段都必须相等才能被视为重复。如果我有 45 列,我需要用 45 比较来做 where 子句?
  • 是的。您必须测试 45 个字段中的每一个。
  • 嗨,不知道你是否在那里。我试过你的方法。它返回给我的记录都不相同。然后我查了一下,大部分记录都是一样的。我有两列是空的,是因为那个吗?
  • 比较 NULL 值很棘手,因为 NULL 不与任何东西比较,甚至不与 NULL 比较。我将编辑我的提案以补偿 NULL 值。
【解决方案2】:

试试这个

选择文档编号 从表 A 相交 选择文件号 从表B

【讨论】:

  • 如果您不确定这是否有效,请将其添加为评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 2023-03-23
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
相关资源
最近更新 更多