2009-12-27 6 views
2

Depuis environ un an, nous autorisons nos utilisateurs à se connecter avec des noms d'utilisateur et/ou des adresses e-mail non uniques (bien que chaque utilisateur possède un identifiant unique). Bien que le système gère élégamment les noms d'utilisateur et les e-mails en double, nous avons finalement décidé d'imposer des noms d'utilisateur et des adresses e-mail uniques. J'ai été chargé de générer une table dans MySQL qui montrera les doublons et les tables dans lesquelles l'ID d'un doublon est utilisé (c'est-à-dire les tables dépendant de l'ID utilisateur du duplicata, en utilisant 1 pour vrai et 0 pour faux). Cette table sera ensuite utilisée comme référence une fois que les données dupliquées seront marquées pour suppression. En bref, je cherche à générer une table quelque chose comme ceci:Questions de souscription/sous-requête multiples MySQL

| User_id | Nom d'utilisateur | Courriel | Exists_in_Table1 | Exists_in_Table2 | Exists_in_Table3 |
--------------------------------------------- -------------------------------------------------- ------------
| 0001 ..... | test1 ......... | email. 0 .......................... | 0 .......................... | 1 .......................... |
| 0002 ..... | test2 ......... | email. 0 .......................... | 1 .......................... | 1 .......................... |
| 0003 ..... | test3 ......... | email. 1 .......................... | 1 .......................... | 1 .......................... |


Peu importe comment cela est accompli. Comme mes compétences SQL font un peu défaut, j'avais l'intention de le faire par programmation en utilisant PHP et un certain nombre de requêtes SQL simples. Cependant, je crois qu'une seule requête SQL ou une série de requêtes (sans l'utilisation de PHP) est l'approche la plus propre. Je sais comment rechercher des doublons, mais je n'arrive pas à comprendre comment interroger plusieurs tables et les joindre par l'ID utilisateur de manière appropriée. J'apprécie toute l'aide avec ceci. Je vous remercie.

Répondre

2
SELECT u.User_id, u.Username, u.Email, 
IF(t1.User_id IS NULL, 0, 1) AS Exists_in_Table1, 
IF(t2.User_id IS NULL, 0, 1) AS Exists_in_Table2, 
IF(t3.User_id IS NULL, 0, 1) AS Exists_in_Table3 
FROM Users u 
LEFT OUTER JOIN Table1 t1 USING (User_id) 
LEFT OUTER JOIN Table2 t2 USING (User_id) 
LEFT OUTER JOIN Table3 t3 USING (User_id); 
+0

Merci pour cela, une réponse si rapide! Je vais essayer ça dès que je serai de retour au bureau. –