Sql 在MS Access中的区分大小写查询中查找重复项

Sql 在MS Access中的区分大小写查询中查找重复项,sql,ms-access,select,case-sensitive,cjk,Sql,Ms Access,Select,Case Sensitive,Cjk,我有一个包含日文文本的表格,我认为其中有一些重复的行。我想编写一个SELECT查询,返回所有重复的行。因此,我尝试根据此站点的答案运行以下查询,但无法重新定位源: SELECT [KeywordID], [Keyword] FROM Keyword WHERE [Keyword] IN (SELECT [Keyword] FROM [Keyword] GROUP BY [Keyword] HAVING COUNT(*) > 1); 问题是Access的平等操作符将两个日语书写系统——平假

我有一个包含日文文本的表格,我认为其中有一些重复的行。我想编写一个SELECT查询,返回所有重复的行。因此,我尝试根据此站点的答案运行以下查询,但无法重新定位源:

SELECT [KeywordID], [Keyword]
FROM Keyword
WHERE [Keyword] IN (SELECT [Keyword]
FROM [Keyword] GROUP BY [Keyword] HAVING COUNT(*) > 1);
问题是Access的平等操作符将两个日语书写系统——平假名和片假名——视为同一事物,它们应该被视为不同的。两种书写系统具有相同的语音值,尽管用于表示声音的书写字符不同-例如。あ 平假名和ア 片假名都代表声音“a”

但是,当我运行上面的查询时,这两个字符都会出现,根据访问权限,它们是相同的字符,因此是重复的。本质上,这是一个不区分大小写的搜索,我需要一个区分大小写的搜索

我在使用简单的SELECT查找关键字时绕过了这个问题,因为这个方法正确地将平假名和片假名视为不同的。不过,我不知道如何调整上面的查询以使用StrComp,因为它不像链接问题中那样直接对一个字符串和另一个字符串求值

基本上,我要问的是:如何执行一个将返回表中所有重复项的查询,区分大小写?

您可以使用exists代替:

尝试使用自连接:

SELECT k1.[KeywordID], k1.[Keyword], k2.[KeywordID], k2.[Keyword]
FROM Keyword AS k1 INNER JOIN Keyword AS k2
ON k1.[KeywordID] < k2.[KeywordID] AND STRCOMP(k1.[Keyword], k2.[Keyword], 0) = 0

请注意,应该是StrComp,而不是StrCmp。我还假设您打算比较k2.Keyword和k.Keyword,而不是KeywordID和Keyword。我尝试了两种方法来比较Keyword+Keyword和KeywordID+Keyword,但两种查询都返回如下值いそいそ 和イソイソ 作为具有相同音值但显然使用不同字符编写的副本。感谢Erik A的编辑和打字错误更正,但此查询仍然无法用于我的目的。很遗憾。@Lou您能继续吗?无法使用?StrComp的一个问题是它会进行部分字符串匹配,如果这是您的问题,可以通过检查字符串长度或使用StrComp两次参数来轻松解决inverted@ErikA-我想运行一个只返回完全重复的值的查询。例如,如果有两条记录あ 和あ, 这些字符集应该返回两次,因为它们是相同的字符集。目前,我的帖子和Gordon Linoff答案中的查询返回的结果不是完全重复的,例如あ 和ア, 因为他们被认为是平等的,即使他们是不同的角色。我不认为部分字符串匹配是问题所在,因为。イソイソ 和いそいそ 不包含任何相同的字符,但在查询中返回的字符都是重复的。如果不清楚,则查询基本上返回a和a,并将其称为重复的,而我希望查询只将a和a视为重复的,或a和a。尝试此操作时,访问当前已冻结,可能是因为关键字表非常庞大。将让您知道它是否有效:
SELECT k1.[KeywordID], k1.[Keyword], k2.[KeywordID], k2.[Keyword]
FROM Keyword AS k1 INNER JOIN Keyword AS k2
ON k1.[KeywordID] < k2.[KeywordID] AND STRCOMP(k1.[Keyword], k2.[Keyword], 0) = 0