在表中的一列中选择重复值

时间:2012-12-24 16:20:58

标签: mysql sql sql-server oracle

我有这张桌子:

id int, name nvarchar(max), ..............

示例:

 ------------------
| id  | name       |
 ------------------
| 1   | Mohammed   | 
| 2   | Mohammed   |    
| 3   | Sakher     |
| 4   | Sakher     |
| 5   | Ahmad      |
| 6   | Ahmad      |
| 11  | Hasan      |
| 50  | Hasan      |
| 17  | Sameer     |
| 19  | Soso       |
| 110 | Omar       |
| 113 | Omar       |
| 220 | Omar       |
 ------------------

我正在尝试编写一个查询结果:

id1 int , id2 int , name nvarchar(max)

示例:

 ------------------------
| id1 | id2 | name       |
 ------------------------
|  1  |  2  | Mohammed   |
|  3  |  4  | Sakher     |
|  5  |  6  | Ahmad      |
| 11  |  50 | Hasan      |
| 110 | 113 | Omar       |
| 110 | 220 | Omar       |
| 113 | 220 | Omar       |
 ------------------------

返回其中一列中的重复项。 我更喜欢SQL Server查询或标准ANSI SQL。

2 个答案:

答案 0 :(得分:9)

此查询返回您要求的内容。比较n1.id> n2.id比n1.id!= n2.id更好,因为这样你可以得到每对两次(第二次,反转):

SELECT 
    n1.id as Col1, n2.id as Col2, n1.name
FROM 
    Names n1, Names n2
WHERE 
    n1.name = n2.name 
    AND n1.id > n2.id

答案 1 :(得分:5)

Select count(*), name
from someTable
group by name
having count(*) > 1

将为您提供所有具有重复项的名称以及重复项的数量,并且可能比您请求的名称更有用。为此,您可以执行以下操作:

Select a.id, b.id, a.name
from someTable a
 inner join someTable b
on a.id <> b.id and a.name = b.name