您好我有一个访问包含多个列的数据库表(比如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) in(Field2,Field3,Field1)")来获取结果但我需要一个简单的查询来解决它,
答案 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,并且我们知道该行应该在查询中显示。
编辑:更改了处理空值的功能。