3

I have this table:

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

Example:

 ------------------
| 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       |
 ------------------

I am trying to write a query to result this:

id1 int , id2 int , name nvarchar(max)

Example:

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

Return the duplicates in one of the columns. I prefer SQL Server query or standard ANSI SQL one.

4

2 回答 2

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
于 2012-12-24T16:27:57.533 回答
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
于 2012-12-24T16:27:10.357 回答