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

时间:2014-07-15 10:18:04

标签: sql ms-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)或Fie​​ld2位于(Field1,Field3,Field4)或Fie​​ld3位于(Field2,Field1,Field4)或Fie​​ld4) in(Field2,Field3,Field1)")来获取结果但我需要一个简单的查询来解决它,

2 个答案:

答案 0 :(得分: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进行了比较。

答案 1 :(得分: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,并且我们知道该行应该在查询中显示。

编辑:更改了处理空值的功能。