[SQL / ACCESS] question un peu tordu sur une requete.

question un peu tordu sur une requete. [SQL / ACCESS] - SQL/NoSQL - Programmation

Marsh Posté le 28-12-2005 à 23:29:19    

Bonjour,
 
Je vais expliquer ma question par un exemple :
 
J'ai deux tables tbl1 et tbl2 avec une relation 1/plusieurs sur les champs tbl1.fld1 et tbl2.fld2.
 
J'ai une troisieme table indépendante tbl3 avec les champs tbl3.fld1 et tbl3.fld2.
 
 
J'aimerais sortir uniquement les couples de valeurs de tbl3 qui n'existe pas comme relation 1/plusieurs des champs tbl1.fld1 et tbl2.fld2.
 
Je sais pas si c'est clair. Pour l'instant j'arrive a sortir uniquement ceux qui existent.
 
help !  :(

Reply

Marsh Posté le 28-12-2005 à 23:29:19   

Reply

Marsh Posté le 29-12-2005 à 11:20:27    

hmmm
 

Code :
  1. select tbl3.fld1, tbl3.fld2
  2. from tbl3
  3. where not exists (select null from tbl2, tbl1 where tbl2.fld2 = tbl1.fld1 and tbl1.fld1 = tbl3.fld1 and tbl2.fld2 = tbl3.fld2)


 
Ca dit quoi ?

Reply

Marsh Posté le 29-12-2005 à 11:25:10    

sinon, y'a le mot-clé "difference", mais je ne pense pas qu'il marche avec Access.
 
sinon, pour ce qui est de tes explications, je suis pas trop sûr de suivre.
 
si y'a une FK entre tbl2.fld2 et tbl1.fld1, alors on part du principe que toute valeur de tbl2.fld2 existe dans tbl1.fld1
Ensuite, si tu cherches les couples (1, 1), (2, 2), etc. avec à chaque fois tbl1.fld1 = tbl2.fld2, alors il suffit de chercher les valeurs de fld3.tbl1 ou fld3.fld2 sont différentes, ou non contenues dans tbl2.fld2
 
On peut donc écrire la requête comme suis :
 

Code :
  1. select tbl3.fld1, tbl3.fld2
  2. from tbl3
  3. where tbl3.fld1 <> tbl3.fld2
  4. or not exists (select null from tbl2 where tbl2.fld2 = tbl3.fld1)


 
A vue de nez, la seconde doit être très légèrement plus rapide


Message édité par Arjuna le 29-12-2005 à 11:25:43
Reply

Marsh Posté le 29-12-2005 à 11:26:17    

ceci dit, je trouve ton problème étrange...

Reply

Sujets relatifs:

Leave a Replay

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