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

问题描述 投票:-1回答:2

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

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

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

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

我在使用SELECT进行简单的StrComp to perform a binary comparison查找关键字时遇到了这个问题,因为此方法正确地将平假名和片假名视为不同的字符。但是,我不知道如何适应上面的查询以使用StrComp,因为它没有像链接的问题中那样直接针对另一个字符串求值。

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

sql ms-access select case-sensitive cjk
2个回答
1
投票

您可以改用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
             );

0
投票

尝试使用自我加入:

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
© www.soinside.com 2019 - 2024. All rights reserved.