如何从表中列出重复值? [复制]

Posted

技术标签:

【中文标题】如何从表中列出重复值? [复制]【英文标题】:How can I list duplicate values out of a table? [duplicate] 【发布时间】:2017-10-15 12:18:00 【问题描述】:

我有这张桌子。某些行在 Kanji 列中有重复值。

如何在这些行中显示相同汉字多次出现的位置?

CREATE TABLE [dbo].[Phrase] (
    [PhraseId]              UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
    [English]               NVARCHAR (250)   NOT NULL,
    [Kanji]                 NVARCHAR (250)   NULL,
    PRIMARY KEY CLUSTERED ([PhraseId] ASC) );

【问题讨论】:

【参考方案1】:

您可以通过该列使用GROUP BY 语句并指定该组的COUNT(*) 大于1 的约束,因此:

SELECT [kanji]
FROM [dbo].[Phrase]
GROUP BY [kanji]
HAVING COUNT(*) > 1

【讨论】:

【参考方案2】:

group by with having 会得到哪些单词是重复的:

SELECT Kanji FROM Phrase
GROUP BY Kanji
HAVING COUNT(*)>1

【讨论】:

【参考方案3】:

从 MyTable 中选择汉字 按汉字分组 计数(*) > 1

我建议在您想要的列上设置全文索引...

【讨论】:

【参考方案4】:
;with cteDuplicates
AS(
    SELECT *
        ,ROW_NUMBER()OVER (PARTITION BY Kanji ORDER BY Kanji) 'Dup'
    FROM dbo.Phrase
)
SELECT * FROM cteDuplicates D
WHERE D.Dup > 1

【讨论】:

感谢您提供此代码 sn-p,它可能会提供一些即时帮助。一个正确的解释would greatly improve 它的教育价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有类似但不相同的问题的读者更有用。请edit您的答案添加解释,并说明适用的限制和假设。【参考方案5】:
SELECT COUNT(*) AS `doubles` FROM [table] GROUP BY `Kanji` HAVING `doubles` > 1;

【讨论】:

【参考方案6】:

看来他想要重复的行,而不仅仅是重复的。一种方法是在该列中查找重复值,然后 JOIN 回到原始表以查看整行。请参阅下面的查询:

; WITH DuplicateKanji AS -- Query for duplicate values
(
    SELECT 
        Kanji 
    FROM Phrase
    GROUP BY Kanji
    HAVING COUNT(*)>1
)
SELECT -- Query to retrieve rows that were duplicates from above query
    p.*
FROM DuplicateKanji dk
    INNER JOIN Phrase p
    ON dk.Kanji = p.Kanji

【讨论】:

以上是关于如何从表中列出重复值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从表中删除重复值 [重复]

选择查询以从表中查找重复值 [重复]

如何从表中选择主键列?

如何从表中一次选择相等的值[重复]

SQL 如何使用 LEFT JOIN 从表中选择单个值,在 Google Datastudio 中

如何使用 join 和 where 子句从表中删除? [复制]