29 de septiembre de 2014

Buscar registros repetidos

¿Quien no tuvo la tarea de buscar registros repetidos en una tabla de Visual FoxPro?...

Una forma de saber si tenemos registros repetidos en nuestras tablas es utilizar una sentencia SELECT con las cláusulas GROUP BY y HAVING como la siguiente:

OPEN DATABASE (HOME(2) + "Northwind\Northwind")
SELECT TerritoryDescription, ;
  COUNT(*) AS Repetido  ;
  FROM Territories ;
  GROUP BY TerritoryDescription ;
  HAVING Repetido > 1

El resultado de esta consulta nos muestra si existen registros repetidos y la cantidad de veces que se repiten.

Pero hay veces que necesitamos saber exactamente que registros están repetidos, para ello podemos utilizar algunas de las siguientes sentencias SELECT:

1)
OPEN DATABASE (HOME(2) + "Northwind\Northwind")
SELECT * ;
  FROM Territories ;
  WHERE TerritoryDescription IN ;
  (SELECT TerritoryDescription ;
  FROM Territories ;
  GROUP BY TerritoryDescription ;
  HAVING COUNT(*) > 1)

2)
OPEN DATABASE (HOME(2) + "Northwind\Northwind")
SELECT * ;
  FROM Territories T1;
  WHERE EXISTS ;
  (SELECT * ;
  FROM Territories T2 ;
  WHERE T1.TerritoryDescription = T2.TerritoryDescription ;
  GROUP BY T2.TerritoryDescription ;
  HAVING COUNT(*) > 1)

Nota: Las pruebas estan realizadas con la tabla "Territories" de la base de datos "Northwind" que viene en los ejemplos de VFP8 y superior.

Luis María Guayán