我有这张桌子:
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。
答案 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