2012-06-15 33 views
22

Estoy tratando de encontrar filas que tienen valores duplicados, pero solo se basan en un número selecto de columnas, ni una sola columna ni toda la fila. Por ejemplo, si mi mesa era la siguiente:Encontrar filas con los mismos valores en varias columnas

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

Mi pregunta sería:

Buscar Todos los identificadores de filas en las que el campo de direcciones y Estado de la fila igualada campo de dirección y Estado de otra fila.

La respuesta a esta consulta sería:

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

alguna idea?

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

Respuesta

27

intente lo siguiente:

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, mientras que éstos ambos trabajan muy bien. Creo que me quedaré con este. Gracias. – gunr2171

+2

Manera mejor y más simple para manejar este tipo de escenario http://stackoverflow.com/questions/13807314/find-rows-where-the-same-two-column-values-recur – himanshupareek66

+1

@ himanshupareek66 No veo la diferencia . El motivo de la unión aquí es porque op quería toda la fila donde había duplicados, no solo la dirección y el estado – 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

sí, esto funcionó para mí, gracias. – gunr2171

+2

El operador de concatenación de cadenas en SQL es '||' no '+'. Pero sería mejor usar 'where (addr, st) in (select addr, st from ...)' de todos modos en lugar de concatenar cadenas (lo que podría tener problemas con algunas combinaciones de dirección y estado) –

Cuestiones relacionadas