sql - 如何从两个表中查找重复项并在其本身中查找重复项?

标签 sql ms-access ms-access-2003

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

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

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

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

最佳答案

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

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

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

关于sql - 如何从两个表中查找重复项并在其本身中查找重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14556737/

相关文章:

c# - 使用 C# 动态重命名 MS Access 中的列

sql - sqlite中有效的日期比较?

c# - MS Access 存储的 DateTime.MinValue 不正确?

ms-access - 如何使 Access 组合框在向下箭头键上展开?

ms-access - 使用动态 SQL 作为记录源设计 Access 表单

java - 未找到列 Access 数据库

mysql - 为下表编写 SELECT 查询

mysql - 如何在没有选择列的情况下将 MySqlDump 文件导入 MySQL

sql - 在两个日期之间添加行 Presto

sql - Access 2013 查询将 null 替换为 0 不起作用?