2017-08-07 1 views
0

Bonjour im la recherche d'une requête dans SQL ou MySQL sur la comparaison des lignes dans la même tableSQL comparer les lignes avec l'affichage des différences dans les colonnes de la même table

Cette requête doit afficher 2 dernières lignes avec le même id mais avec différents enregistrements en colonnes

Mon tableau

ID|is_superuser|username|first_name|last_name|email   |is_staff|is_active| 
1|   1|admin |FC  |   |[email protected]|  1|  1| 
1|   1|admin |   |   |[email protected]|  1|  1| 
1|   1|admin |adminname |   |[email protected] |  1|  1| 

RÉSULTAT:

ID|username|first_name|email| 
1|admin |adminname |[email protected]| 
1|admin |   |[email protected]| 

thx pour l'aide

+1

Pouvez-vous ajouter créer et insérer des instructions pour la table dans la publication? –

+1

Je ne comprends pas la logique par laquelle vous vous retrouvez avec ces deux enregistrements sur trois. Les trois enregistrements ont le même horodatage. –

+0

Le résultat devrait afficher ID | USERNAME + colonnes avec des différences entre les deux dernières lignes –

Répondre

0

Vous pouvez utiliser une exists clause pour exiger qu'il ya une autre rangée avec le même id mais un email différent:

select * 
from MyTable t1 
where exists 
     (
     select * 
     from MyTable t2 
     where t1.id = t2.id 
       and coalesce(t1.email, '') <> coalesce(t2.email, '') 
     ) 

par votre commentaire, si vous avez plusieurs colonnes, vous pouvez générer la clause where avec une requête comme:

select concat('and coalesce(t1.', column_name, ', '''') <> coalesce(t2.', 
       column_name, ', '''')') 
from information_schema.columns 
where table_name = 'MyTable' 
+0

oui mais j'ai 200 colonnes, j'ai besoin de montrer les différences entre deux journaux donc je ne sais pas quelles colonnes sont modifiées –

+0

Vous pourriez générer la clause 'where', exemple ajouté – Andomar