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

Saw*_*wan 3 mysql sql sql-server oracle

我有这张桌子:

id int, name nvarchar(max), ..............
Run Code Online (Sandbox Code Playgroud)

例:

 ------------------
| 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       |
 ------------------
Run Code Online (Sandbox Code Playgroud)

我试图写一个查询结果:

id1 int , id2 int , name nvarchar(max)
Run Code Online (Sandbox Code Playgroud)

例:

 ------------------------
| id1 | id2 | name       |
 ------------------------
|  1  |  2  | Mohammed   |
|  3  |  4  | Sakher     |
|  5  |  6  | Ahmad      |
| 11  |  50 | Hasan      |
| 110 | 113 | Omar       |
| 110 | 220 | Omar       |
| 113 | 220 | Omar       |
 ------------------------
Run Code Online (Sandbox Code Playgroud)

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

ede*_*rbf 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
Run Code Online (Sandbox Code Playgroud)

  • 我编辑了您的查询以完全匹配OP所需的答案,因为您的答案是完美而简单的.添加了sqlfiddle演示,它是一个很棒的工具! (2认同)

SWe*_*eko 5

Select count(*), name
from someTable
group by name
having count(*) > 1
Run Code Online (Sandbox Code Playgroud)

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

Select a.id, b.id, a.name
from someTable a
 inner join someTable b
on a.id <> b.id and a.name = b.name
Run Code Online (Sandbox Code Playgroud)