J'ai besoin de trouver un extrait MySQL intelligent qui me permettra de voir facilement deux tables, les identifiants de la table s'ils existent ou NULL ou vide s'ils n'existent pas.Recherche de données manquantes dans la base de données
J'ai une table d'utilisateurs et une table héritée et en dehors de la comparaison manuelle je ne peux pas figurer dehors comment les faire apparaître dans une table ainsi je peux comparer. Ce que j'aimerais voir quelque chose comme ceci:
+----------------------------+
| user_id | email | uid |
| 14 | [email protected] | 26 |
| 16 | [email protected] | NULL |
+----------------------------+
Je sais qu'il ya un moyen d'inclure des valeurs NULL ou vides, mais je ne suis pas sûr de ce qu'il est. Voici ma requête SQL dérangée jusqu'à présent, oui, je sais que c'est horrible à faire subselects intérieur du sous-requêtes:
select uid from users where mail IN (
select email from legacy_users where id NOT IN (
select sourceid from migrate_map_users
)
);
Il y a trois tables impliquées ici, legacy_users => migrate_map_users => users
. Le milieu est juste un m2m qui joint les deux. legacy_users et les utilisateurs ont tous les deux une colonne d'e-mail. et leur propre version d'un identifiant.
Merci à tous!
Ah, vous avez raison. Je pense que ce que je cherchais était un FULL OUTER JOIN. Votre lien fourni une recette pour faire exactement cela dans MySQL –
@Chuck Vose - FULL OUTER devrait fournir tous les enregistrements de _both_ tables, si l'autre a un enregistrement correspondant ou non. – Oded
MySQL ne supporte pas la syntaxe FULL OUTER JOIN. –