我有一个包含日语文本的表,我相信其中有一些重复的行。我想编写一个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,因为它没有像链接的问题中那样直接针对另一个字符串求值。
基本上我要问的是:如何进行查询以返回表中所有重复项,区分大小写?
您可以改用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