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

Find duplicates in case-sensitive query in MS Access

我有一个包含日语文本的 table,我认为其中有一些重复的行。我想写一个 SELECT 查询,其中 return 是所有重复的行。因此,我尝试 运行 根据来自该站点的答案进行以下查询(我无法重新定位源):

SELECT [KeywordID], [Keyword]
FROM Keyword
WHERE [Keyword] IN (SELECT [Keyword]
FROM [Keyword] GROUP BY [Keyword] HAVING COUNT(*) > 1);

问题是 Access 的相等运算符将两种日语书写系统(平假名和片假名)视为同一事物,而它们本应区别对待。两种书写系统具有相同的语音值,尽管用于表示声音的书面字符不同 - 例如あ(平假名)和ア(片假名)都代表音'a'.

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

我在使用 执行简单的 SELECT 查找关键字时解决了这个问题,因为此方法正确地将平假名和片假名区别对待。不过,我不知道如何调整上面的查询以使用 StrComp,因为它没有像链接问题中那样直接针对另一个字符串评估一个字符串。

基本上我要问的是:我如何进行查询 return table 中的所有重复项,区分大小写?

您可以使用 exists 代替:

SELECT [KeywordID], [Keyword]
FROM Keyword as k
WHERE EXISTS (SELECT 1
              FROM Keyword as k2
              WHERE STRCOMP(k2.Keyword, k.KeyWord, 0) = 0 AND
                    k.KeywordID <> k2.KeywordID
             );

尝试使用自连接:

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