2010-11-25 17 views
8

Tablodan birinin yinelenen telefon numarası içerip içermediğini kontrol etmek için SQL Server komut dosyasını nasıl yazabilirim?SQL Server'da yinelenen kaydı nasıl kontrol edebilirim

Örnek: yinelenen telefon numarası ile bu kayıtların dönebilirsiniz SQL Server bir senaryo yazabilirim nasıl aşağıdaki verilere

name telephone 
alvin 0396521254 
alan 0396521425 
amy 0396521425 

ile müşteri adında bir tabloya sahip

??

cevap

20

tekrarlar da değerlerini görmek için:

SELECT c.telephone 
    FROM CUSTOMER c 
GROUP BY c.telephone 
    HAVING COUNT(*) > 1 

bu çiftleri için tabloda ilgili kayıtlarını görmek için:

SELECT c.* 
    FROM CUSTOMER c 
    JOIN (SELECT c.telephone 
      FROM CUSTOMER c 
     GROUP BY c.telephone 
     HAVING COUNT(*) > 1) x ON x.telephone = c.telephone 
+0

@astander: Eğer bu migren giderse daha iyi olurdum. Eğer liderliğimi sürdürürsem daha fazla katılmam gerek. –

+0

Büyük bir enoug arabelleğiniz var. Sanırım biraz zaman ayırmanız gerekiyor X-) –

+0

@astander: Korkarım ki 30K'lık tamponumdasınız - durdurulamalısınız ki bu yüzden denge yeniden kurulabilir. : p –

0

Eminim ki birisi daha iyi bir çözüm bulacaktır, ama yine de ham yolumu vereceğim.

Eğer ben olsaydım, GROUP BY yan tümcesi ile birlikte COUNT işlevini kullanırdım. Birçok çiftleri var nasıl bir sayı da yinelenen telefon numaralarını dönmelidir

SELECT telephone, COUNT(telephone)[Entries] FROM table1 
GROUP BY telephone 
HAVING Entries > 1 

:

ben gibi bir SQL deyimi yazardı.

+2

Ne diyorsun? hangi veritabanını kullanarak GROUP BY, HAVING dışındaki WHERE yan tümcesini kullanıyorsunuz? –

+1

SQL Server, GROUP BY kullanırken NEREDE izin verir. Her ne kadar sonuç kümesinden önce gerçekleşse de, bu durumda büyük olasılıkla HAVING olması gerekecektir (sonuç kümesi oluşturulduktan sonra HAVING uygulanacaktır). http://technet.microsoft.com/en-us/library/ms177673.aspx –

1

Hatta

;WITH Duplicates AS (
     SELECT Telephone 
     FROM Table 
     HAVING COUNT(1) > 1 
) 
SELECT t.* 
FROm Table t INNER JOIN 
     Duplicates d ON t.Telephone = d.Telephone 

Ya da bir şey gibi bir şey deneyebilirsiniz

gibi
SELECT * 
FROM Table t 
WHERE EXISTS (
        SELECT 1 
        FROM Table tI  
        WHERE tI.Telephone = t.Telephone 
        AND  tI.Name != t.Name 
       ) 
İlgili konular