2016-01-26 1 views
-2

table a des doublons:rowid et trouver des doublons?

JOB     JOBID    EMPID    
-------------------- -------------------- -------------------- 
Manager    10     1     
Manager    10     1     
Operations   20     2     
Engineer    30     3     
Manager    10     1     
Operations   30     2   

La requête

select * from dept 
where rowid not in (select min(rowid) from dept group by job); 

donne des résultats comme:

JOB     JOBID    EMPID    
-------------------- -------------------- -------------------- 
Manager    10     1     
Operations   30     2     
Manager    10     1    

quelqu'un peut-il expliquer comment traiter ne pour récupérer le résultat? Je sais que chaque ligne a rowid unique. mais d'abord la sous-requête s'exécute pour obtenir le minimum de rowid qui est la première ligne et ensuite compare (pas dans) avec le externe qui récupère tous rowid. Est-ce que certains peuvent expliquer beaucoup plus clairement comment comparer et récupérer 3 lignes comme résultat? Essayer de comprendre la logique simple. ?

+1

Vous avez tagué ceci pour MySQL et pour Oracle. Je suppose que la balise MySQL est incorrecte en fonction du contenu de la question. Est-ce que cela devrait être retiré? Ou y a-t-il une partie de la question MySQL qui me manque? –

Répondre

0

Avec les données que vous avez enregistrées, la sous-requête renvoie une ligne pour chaque travail - Gestionnaire, Opérations et Ingénieur. Ensuite, il obtient tous les enregistrements qui ne sont pas dans cette sous-requête.

Il ne retourne pas Engineer, car le seul rowid doit être le minimum. Il y a trois enregistrements pour Manager. L'un a le plus bas rowid donc les deux autres sont retournés. C'est similaire pour les opérations.

Un rowid est expliqué assez bien dans the documentation.

+0

Merci d'avoir suggéré – S123DB8

+0

yeh je l'ai réalisé maintenant – S123DB8