2012-06-15 20 views
22

Ich versuche, Zeilen mit doppelten Werten zu finden, die jedoch nur auf einer ausgewählten Anzahl von Spalten basieren, nicht auf einer einzelnen Spalte oder der gesamten Zeile. Zum Beispiel sah, wenn meine Tabelle wie folgt aus:Suchen von Zeilen mit denselben Werten in mehreren Spalten

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

Meine Frage wäre:

alle IDs für die Zeilen finden, wo die Adresse und Statusfeld einer anderen Zeile der Adresse und Statusfeld angepasst der Zeile.

Die Antwort auf diese Frage wäre:

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

Irgendwelche Ideen?

Vorschläge: How to select multiple columns values same rows from single table

Antwort

27

Versuchen Sie Folgendes:

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, während diese beide gut funktionieren. Ich denke, ich werde bei diesem bleiben. Vielen Dank. – gunr2171

+2

Bessere und einfachere Art, mit dieser Art von Szenario umzugehen http://stackoverflow.com/questions/13807314/find-rows-where-the-same-two-column-values-recur – himanshupareek66

+1

@ himanshupareek66 Ich sehe den Unterschied nicht . Der Grund für den Beitritt hier, weil wir wollten die ganze Reihe, wo es Dubletten gab, nicht nur Adresse und Status – 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

ja, das hat für mich Arbeit, danke. – gunr2171

+2

Der String-Verkettungsoperator in SQL ist '||' nicht '+'. Aber es wäre besser 'where (addr, st) in (wähle addr, st from ...)' trotzdem zu verwenden, anstatt die Strings zu verketten (was Probleme mit einigen Kombinationen von Adresse und Status haben könnte) –

Verwandte Themen