首页 文章

在表中查找单个行的重复列值

提问于
浏览
0

嗨,我有一个包含多列的 Access 数据库表(如Col_1,Col_2,Col_3,......,Col_n)所有整数

我需要一个查询来查找任何特定行多列的值是重复的,

以示例为例下面是表格

Field2  Field3  Field4  Field1
 1        3       2       3
 4        3       1       2
 5        6       7       8
 2        2       3       1 
 3        6       5       4
 3        3       3       2
                  2       1
                  2       2

现在我需要一个查询来显示下面的结果

Field2 Field3  Field4  Field1
  1       3        2      3
  2       2        3      1
  3       3        3      2
                   2      2

目前我正在使用查询(“从表1中选择*,其中Field1位于(Field2,Field3,Field4)或Field2位于(Field1,Field3,Field4)或Field3位于(Field2,Field1,Field4)或Field4位于(Field2,Field3, Field1)“)获取结果但是我需要一个简单的Query来解决它,

2 回答

  • 1

    请注意,您可以稍微简化一下查询:

    Select *
    from Table1
    where Field1 in (Field2, Field3, Field4) or
          Field2 in (Field3, Field4) or
          Field3 in (Field4);
    

    您只需要将字段与行中的其余字段进行比较 . 换句话说,表达式 Field4 in (Field1, Field2, Field3) 是多余的,因为您已经将每个字段都比较为 Field4 .

  • 0

    写了这个保存在模块中的快速功能:

    Public Function HasDupes(ParamArray vals()) As Boolean
    
    Dim dic As Object
    Dim v As Variant
    
    Set dic = CreateObject("Scripting.Dictionary")
    
    HasDupes = False
    
    For Each v In vals
        If IsNull(v, "") = False Then
            If dic.Exists(v) = True Then
                HasDupes = True
                Exit For
            Else
                dic.Add v, ""
            End If
        End If
    Next
    
    Set dic = Nothing
    
    End Function
    

    这是查询:

    SELECT Field2, Field3, Field4, Field1
    FROM Table1
    WHERE (((HasDupes([Field2],[Field3],[Field4],[Field1]))=True));
    

    该函数需要尽可能多的字段来提供它 . 然后它利用Dictionary对象来查找唯一值,因为Dictionary键必须是唯一的 . 如果存在重写值,则该函数返回True,并且我们知道该行应该在查询中显示 .

    EDIT: 更改了处理空值的函数 .

相关问题