T-SQL Cara: Membandingkan dan Membuat Daftar Entri Duplikat dalam Tabel

SQL Server 2000. Tabel tunggal memiliki daftar pengguna yang menyertakan ID pengguna unik dan nama pengguna non-unik.

Saya ingin mencari tabel dan membuat daftar pengguna yang memiliki nama pengguna tidak unik yang sama. Misalnya, tabel saya terlihat seperti ini:

ID   User Name   Name
==   =========   ====
0    parker      Peter Parker
1    parker      Mary Jane Parker      
2    heroman     Joseph (Joey) Carter Jones
3    thehulk     Bruce Banner

Yang ingin saya lakukan adalah melakukan SELECT dan menetapkan hasilnya menjadi:

ID   User Name   Name
==   =========   ====
0    parker      Peter Parker
1    parker      Mary Jane Parker   

dari mejaku.

Saya bukan guru T-SQL. Saya bisa melakukan penggabungan dasar dan semacamnya, tapi menurut saya pasti ada cara yang elegan untuk melakukan ini. Kecuali keanggunan, pasti ada cara APAPUN untuk melakukan ini.

Saya menghargai metode apa pun yang dapat Anda bantu mengenai topik ini. Terima kasih! ---Dan---


person Dan7el    schedule 10.06.2010    source sumber


Jawaban (4)


SATU ARAH

select t1.* from Table t1
join(
select username from Table
group by username
having count(username) >1) t2 on t1.username = t2.username
person SQLMenace    schedule 10.06.2010

Cara paling sederhana yang dapat saya pikirkan untuk melakukan ini menggunakan sub-kueri:

select * from username un1 where exists
(select null from username un2 
where un1.user_name = un2.user_name and un1.id <> un2.id);
person Community    schedule 10.06.2010

Sub-kueri memilih semua nama yang memiliki >1 baris dengan nama itu... kueri luar memilih semua baris yang cocok dengan ID tersebut.

SELECT T.* 
FROM T
    , (SELECT   Dupe_candidates.USERNAME
       FROM     T AS Dupe_candidates
       GROUP BY Dupe_candidates.USERNAME
       HAVING   count(*)>1
     ) Dupes
WHERE T.USERNAME=Dupes.USERNAME
person DVK    schedule 10.06.2010

Anda dapat mencoba yang berikut ini:

SELECT * 
FROM dbo.Person as p1 
WHERE 
(SELECT COUNT(*) FROM dbo.Person AS p2 WHERE p2.UserName = p1.UserName) > 1;
person ppolyzos    schedule 10.06.2010