在MS Access数据库中查找两个表(Employee和Employee_PROD)之间的不匹配(即差异)记录我使用 UNION ALL 。查询如下:
SELECT [COMPANY],[DEPT],[DOJ],[EMP_ID],[Name],[SUB_COMPANY] FROM
(SELECT '[Employee]' AS TableName,[COMPANY],[DEPT],[DOJ],[EMP_ID],[Name],[SUB_COMPANY] FROM [Employee]
UNION ALL
SELECT '[Employee_PROD]' AS TableName,[COMPANY],[DEPT],[DOJ],[EMP_ID],[Name],[SUB_COMPANY] FROM [Employee_PROD] )
GROUP BY [COMPANY],[DEPT],[DOJ],[EMP_ID],[Name],[SUB_COMPANY]
HAVING COUNT(*) = 1 AND MIN(TableName) = '[Employee]'
我面临的问题是GROUP BY
没有考虑区分大小写。例如,“ a ndrew”和“ A ndrew”被视为相同。我想以区分大小写的方式执行分组以查找差异记录。
有没有办法在MS Access中做同样的事情?
是否有其他方法可以找到具有相同列名,数据类型和记录数的两个表之间的差异为7,00,000?
我尝试了以下内容:
DataTable
,然后找出差异。由于存在大量数据而导致内存不足。NOT EXISTS
比较行。查询被绞死,执行从未完成。UNION ALL
方法正在运行,但问题是GROUP BY
没有考虑区分大小写。答案 0 :(得分:0)
您可以按字节值分组:
? StrToByte("Andrew")
416E64726577
? StrToByte("andrew")
616E64726577
虽然你拥有大量数据可能会有点慢。
Public Function StrToByte(ByVal strChars As String) As String
Dim abytChar() As Byte
Dim lngChar As Long
Dim strByte As String
abytChar() = StrConv(strChars, vbFromUnicode)
strByte = Space(2 * (1 + UBound(abytChar) - LBound(abytChar)))
For lngChar = LBound(abytChar) To UBound(abytChar)
Mid(strByte, 1 + 2 * lngChar) = Hex(abytChar(lngChar))
Next
StrToByte = strByte
End Function
仅限SQL,如果您只关注第一个字符,请尝试:
GROUP BY [COMPANY],[DEPT],[DOJ],[EMP_ID],[Name], ASC([Name]),[SUB_COMPANY]
答案 1 :(得分:0)
您是否可以在模块中指定OPTION COMPARE BINARY来执行区分大小写的搜索?
这个帖子https://access-programmers.co.uk/forums/showthread.php?t=33962和这个How to write Case Sensitive Query for MS Access?都描述了不同的方法。