8797 sujets

Développement web côté serveur, CMS

Bonjour !

J'ai une table de 1750 enregistrements, cette table ne possède qu'un champ. Je voudrais pouvoir lister toutes les enregistrements de cette table qui ne sont pas présents dans les 3 autres tables.

J'ai écrit une requête mais j'ai pas l'impression d'utiliser la bonne méthode !
SELECT table.champ 
FROM table 
WHERE table.champ NOT IN (SELECT table1.champ FROM table1) 
AND table.champ NOT IN (SELECT table2.champ FROM table2) 
AND table.champ NOT IN (SELECT table3.champ FROM table3)

Modifié par Alphonse (31 Oct 2008 - 09:37)
Salut, salut,

la requête est valide mais effectivement un peu lourde. Smiley murf

Peut-être s'agit-il d'une erreur de conception de tes tables... ou pas ! Smiley langue

Tu pourrais préciser le fonctionnement ?
J'ai deux tables qui sont liées à une troisième via un index. Ces trois tables possèdent un champ "email". Je suis en possession d'une quatrième table qui contient un champ "email" et je dois lister tous les enregistrements présents dans la 4ème table mais absents dans les 3ères tables.
Désolé, mais sans te donner de solution viable, je peux te dire que tu souffre d'un gros problème de conception...

Explique un peu l'utilité de tes différentes tables et de ta requête s'il te plait
Alphonse a écrit :
J'ai deux tables qui sont liées à une troisième via un index. Ces trois tables possèdent un champ "email". Je suis en possession d'une quatrième table qui contient un champ "email" et je dois lister tous les enregistrements présents dans la 4ème table mais absents dans les 3ères tables.

A moins que ce ne soit pour une moulinette ponctuelle il semble en effet assez étonnant qu'un champ email se retrouve dans plusieurs tables. Smiley cligne
Utilité des tables
Je possède des contacts (table2) et des services (table3) qui possèdent chacuns leurs propres caractéristiques dont leur adresse e-mail. Ces contacts et ces services sont liés à un répertoire (table1) qui possède des caractéristiques communes aux contacts (table2) et services (table3) (cf. principe de généralisation). Cette table "répertoire" possède également une adresse e-mail qui est l'adresse principal.

Utilité de la requête
Je dois connaître tous les enregistrements présents dans une table "tampon" (créée provisoirement) mais non présents dans les 3 tables citées précédemment.
Eh bien à part l'email principal qui est une notion particulière il me semble que tous les champs représentent bien la même chose (une adresse mail) et qu'il manque donc un niveau à ta conception.

En gros tu devrais avoir selon moi une table emails avec un identifiant et l'adresse mail et toutes les autres tables ne devrait pas avoir un champ email mais un champ id_email qui serait le lien. Il se peut aussi qu'en fonction de ce que tu veux faire tu aies besoin de rajouter des flags email_contact Oui/Non , email_service Oui/Non.

Du coup ta requête se simplifie car il suffit de déterminer quels mails n'appartiennent pas encore à la table emails.