quarta-feira, maio 28, 2008

SQL - detectar valores repetidos

Imagine-se o cenário que é a meio do desenvolvimento de uma aplicação uma coluna que não era unique ter de passar a sê-lo, mas ao mesmo tempo temos de manter os dados que já estão carregados na tabela, detectando os que estão repetidos e alterando só esses para cumprir a restrição da coluna ter valores unique.

O script seguinte é um exemplo de como podemos obter os valores repetidos:

SELECT colName, COUNT(colName) AS cnt
FROM tableName
GROUP BY colName
ORDER BY cnt desc

3 comentários:

  1. Tiago,
    Por acaso esse até é um dos problemas colocados pela Safira no processo de recrutamento :-)
    Já agora, vê tambem a clausula HAVING que neste caso pode ser porreira para cortar os que têm apenas 1.

    Alex

    ResponderEliminar
  2. E porque não:

    SELECT colName, COUNT(colName) AS cnt
    FROM tableName
    GROUP BY colName
    HAVING cnt>1


    Devolvendo todos os registos com colName repetidos.

    ResponderEliminar
  3. Realmente é necessária a cláusula having para isolar apenas os duplicados conforme o Antonio exemplificou.

    ResponderEliminar