2010-01-06 5 views
1

J'ai quatre tables MYSQL 5.0: userdb, filterdb, filterlinkdb, mandatoryfilterdb.Contrôle de cohérence Mysql entre deux tables

Tous les tableaux sont simples. * = Pri

userdb: 
id* 
name 

filterdb: 
id* 
name 

filterlinkdb: 
user_id* 
filter_id* 

mandatoryfilterdb 
filter_id* 

Comment puis-je vérifier filterlinkdb pour vous assurer que tous les enregistrements de mandatoryfilterdb existent pour chaque user_id en utilisant un seul (avec ou sans sous-marins) requête? Editer :: J'ai oublié de dire, je voudrais retourner les valeurs filter_id de mandatorydb qui ne sont pas présentes dans filterlinkdb pour tous user_id, par exemple: l'utilisateur # 1 a seulement le filtre 1, mais 1 et 2 sont dans le mandatorydb , donc il retournerait l'utilisateur 1, le filtre 2 (comme cela manque).

Répondre

1

Cela devrait fonctionner:

select userdb.id,mandatoryfilterdb.filter_id 
from userdb 
    join mandatryfilterdb 
    on 1 
    left join filterlinkdb 
    on userdb.id=filterlinkdb.user_id 
     and mandatryfilterdb.filter_id=filterlinkdb.filter_id 
where filterlinkdb.user_id is null 

Il sélectionne tous les multiples cartésienne entre les utilisateurs et les filtres-obligatoires, et les vérifier contre le vrai tableau filterlinkdb. Si elles ne sont pas là (filterlinkdb.user_id is null, vous pouvez vérifier le filter_id à la place, c'est pareil) - que de les donner dans le résultat de la requête.

Si aucun enregistrement n'est renvoyé, vous êtes cohérent.

+0

Merci beaucoup, je lis dessus pour mieux le comprendre. Je ne pense pas que j'aurais pu écrire cette requête moi-même. Merci encore. –

Questions connexes