2 votes

Afficher les enregistrements en double dans une table MySQL

J'ai une table MySQL qui contient environ 30 000 enregistrements, dont j'estime que 2 000 sont des doublons.

Comment puis-je élaborer une requête pour afficher les doublons qui partagent TOUTES les colonnes suivantes : STREET_NUMBER, STREET_NAME, UNIT_NUMBER, ZIP_CODE mais une autre colonne appelée MLS_ID qui n'est PAS la même ?

Je veux seulement voir les enregistrements où il y a une correspondance complète et où le MLS_ID est différent.

1voto

Matt Fenwick Points 17097

Vous pourriez faire un group-by, et ne prendre que les groupes où le compte est supérieur à 1 (c'est-à-dire où il y a des doublons) :

select 
  <grouping columns>  -- put STREET_NUMBER, STREET_NAME, etc. here
from
  (select distinct * from <tablename>)
group by
  <grouping columns>  -- and here!
having 
  count(*) > 1

Juste Ne le fais pas. mettre MLS_ID dans la clause group-by. Cela suppose que MLS_ID est la seule colonne non groupée.

1voto

Will Points 495

Essayez ceci (non testé) :

SELECT * FROM table t1 INNER JOIN table t2 
  USING(STREET_NUMBER, STREET_NAME, UNIT_NUMBER, ZIP_CODE) 
  WHERE t1.MLS_ID != t2.MLS_ID;

1voto

Nitin Midha Points 1971

Je pense que ceci devrait fonctionner (non testé)

SELECT *  
  FROM Table1 T
 INNER JOIN
          (
            SELECT STREET_NUMBER, STREET_NAME, UNIT_NUMBER, ZIP_CODE
              FROM Table1 T1
             GROUP BY STREET_NUMBER, STREET_NAME, UNIT_NUMBER, ZIP_CODE
            HAVING COUNT(DISTINCT MLS_ID) > 1
          ) T2 ON T.STREET_NUMBER = T2.STREET_NUMBER AND T.STREET_NAME = T2.STREET_NAME AND         T.UNIT_NUMBER = T2.UNIT_NUMBER AND T.ZIP_CODE = T2.ZIP_CODE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X