【问题标题】:Find Duplicate Column Values for a single row in Table查找表中单行的重复列值
【发布时间】:2014-09-05 11:55:21
【问题描述】:

您好,我有一个 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

目前我正在使用查询 ("Select * from Table1 where Field1 in (Field2,Field3,Field4) or Field2 in (Field1,Field3,Field4) or Field3 in (Field2,Field1,Field4) or Field4 in (Field2 ,Field3,Field1)") 来获取结果但是我需要一个简单的查询来解决它,

【问题讨论】:

  • 您的查询似乎很简单。它有什么问题?
  • 我的问题是我用 4 个字段举了一个简单的例子,但我必须实时处理 20 多个类似的列

标签: sql ms-access


【解决方案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 进行了比较。

【讨论】:

    【解决方案2】:

    编写了这个保存在模块中的快速函数:

    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,并且我们知道该行应该出现在查询中。

    编辑:更改了处理空值的函数。

    【讨论】:

    • 您好,感谢 VBlades 的回复,但我没有实时定义函数的模块,我将使用查询通过 ODBC 连接触发 Excel 文件
    猜你喜欢
    • 2020-09-10
    • 2014-05-08
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2019-03-21
    • 2013-05-07
    • 1970-01-01
    • 2020-11-28
    相关资源
    最近更新 更多