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.
此查询返回您要求的内容.比较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)
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)