comment optimiser une requete (en remplacant le distinct)

comment optimiser une requete (en remplacant le distinct) - SQL/NoSQL - Programmation

Marsh Posté le 20-04-2004 à 15:58:55    

'lut tt le monde
bon j'explique en gros le probleme que j'ai
j'ai trois tables (F,M,FF)
[M]         [F]            [FF]
nomM       nomO             id
          *nomM            *nomO
                           *c
 
*(cle etrangere)
 
donc tout d'abord, je souhaite recuperer toutes les valeurs de F qui n'ont pas d'occurences dans FF
 

Code :
  1. select distinct F.nomO  from F where nomO NOT IN (select FF.nomO from FF where c='read');


 
ensuite je veux recuperer tous les nomM (de M) qui ont plus d'un F(resultat de la requete precedente )  

Code :
  1. select distinct M.nomM from F,M,FF
  2.    where F.nomO NOT IN (select F.nomO from FF where F.nomP='read')
  3.    AND   F.nomM=M.nomM


 
mais le probleme est que cette requete la est super longue a cause du distinct
y'a pas moyen de la simplifier ou de contourner le probleme ?
 
 
 
 

Reply

Marsh Posté le 20-04-2004 à 15:58:55   

Reply

Marsh Posté le 20-04-2004 à 16:15:25    

hmm, merdasse, ma requete 1 est pas bonne, si j'ai aucune occurence dans la table FF, il me renvoi rien du tout


Message édité par swich le 20-04-2004 à 16:15:35
Reply

Marsh Posté le 20-04-2004 à 16:56:56    

Pour la première requête, fais plutôt une jointure externe, du genre (non testé) :
 

Code :
  1. select distinct nomOdeF from
  2. (select F.nomO as nomOdeF, FF.nomO as nomOdeFF
  3. from F, FF
  4. where F.nomO = FF.nomO
  5. and c='read')
  6. where nomOdeFF is null;


 

Reply

Marsh Posté le 20-04-2004 à 16:58:58    

Sinon ... tu donnes un jeu d'essai pour tes tables
et ce que tu attends comme résultat !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed