3

私はこのテーブルを持っています:

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

列の1つに重複を返します。私はSQLServerクエリまたは標準のANSISQLクエリを好みます。

4

2 に答える 2

9

このクエリは、要求したものを返します。n1.id> n2.idを比較することは、n1.id!= n2.idのように行うよりも優れています。これは、この方法ですべてのペアを2回取得するためです(2回目は逆になります)。

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 に答える