2012-06-15 20 views
22

Próbuję znaleźć wiersze, które mają zduplikowane wartości, ale jedynie w oparciu off wybranej liczby kolumn, a nie pojedynczej kolumnie lub całego rzędu. Na przykład, jeśli mój stół wyglądał następująco:Znalezienie wiersze z samymi wartościami w wielu kolumnach

ID  Address State Name 
------------------------------- 
0  7 Brown NY  John 
1  3 Red  WX  Jane 
2  7 Brown WX  Ted 
3  7 Brown NY  Fred 

Moje pytanie byłoby:

Znajdź wszystkie identyfikatory dla wierszy gdzie Adres i państwo pole wiersza dopasował adresie i stanie pola innym wierszu jest.

Odpowiedź na to zapytanie będzie:

ID Address State Name 
------------------------------ 
0  7 Brown NY  John 
3  7 Brown NY  Fred 

jakieś pomysły?

Sugestie: How to select multiple columns values same rows from single table

Odpowiedz

27

wykonaj następujące czynności:

SELECT A.* 
FROM YourTable A 
INNER JOIN (SELECT Address, State 
      FROM YourTable 
      GROUP BY Address, State 
      HAVING COUNT(*) > 1) B 
ON A.Address = B.Address AND A.State = B.State 
+0

ok, podczas gdy te obie prace dobrze. Myślę, że będę trzymać się tego. Dzięki. – gunr2171

+2

Lepsze i prosty sposób obsłużyć tego rodzaju scenariusza http://stackoverflow.com/questions/13807314/find-rows-where-the-same-two-column-values-recur – himanshupareek66

+1

@ himanshupareek66 Nie widzę różnicy . Powodem przyłączenia się tutaj, bo op chciał cały wiersz, w którym były duplikaty, nie tylko adres i stan – Lamak

2
select * 
from #table1 
where Addr + St in (select Addr + St as FullAddr 
      from #table1 
      group by Addr + St 
      having count(Addr+St) > 1) 
+0

tak, to działało dla mnie, dzięki. – gunr2171

+2

Operator łączenia ciągów w SQL to '||' nie '+'. Ale byłoby lepiej użyć 'gdzie (addr, st) w (wybierz addr, st od ...)' tak czy inaczej zamiast konkatenować łańcuchy (które mogą mieć problemy z niektórymi kombinacjami adresu i stanu) –

Powiązane problemy