SQL

Fermé
hydroxyproline - 6 avril 2009 à 14:36
 Jres - 7 avril 2009 à 11:43
Bonjour à tous,

Je dois me transformer en pseudo programeur pour quelque temps, mais malheureusement je n'y arrive pas du tout (j'y comprends pas grand chose en fait). J'ai trois tableaux, (C3bd0, Hd0 et C3bHd0) chacun de ces tableau comportant les colonnes suivantes : mz_d0, z et Tr.

J'aimerai que mon code SQL me selectionne que les mz spécifique au tableau C3bHd0. Les mz spécifiques seront ceux qui repondront au conditions suivantes:

(C3bHd0.mz_do - C3bd0.mz_d0)/(C3bHdo.mz_d0)) <= ABS(5)

(C3bHd0.mz_do - Hd0.mz_d0)/(C3bHdo.mz_d0)) <= ABS(5)

C3bH_d0.z = C3b_d0.z

(C3bH_d0.Tr <= (C3b_d0.Tr + 0.2) AND C3bH_d0.Tr >= (c3b_d0.Tr - 0.2)

(C3bH_d0.Tr <= (H_d0.Tr + 0.2) AND C3b_Hd0.Tr >= (H_d0.Tr - 0.2)


J'ai écrit le code de la façon suivante:

SELECT C3bHd0.mz_d0 FROM C3bHd0

WHERE C3bHd0.mz_d0 NOT IN (SELECT C3bHd0.mz_d0 FROM C3bHd0,C3bd0,Hd0 WHERE ((C3bHd0.mz_do - C3bd0.mz_d0)/(C3bHdo.mz_d0)) <=

ABS(5)
AND ((C3bHd0.mz_do - C3bd0.mz_d0)/(C3bHdo.mz_d0)) <= ABS(5))

AND

(((C3bHd0.mz_do - Hd0.mz_d0)/(C3bHdo.mz_d0)) <= ABS(5)
AND ((C3bHd0.mz_do - Hd0.mz_d0)/(C3bHdo.mz_d0)) <= ABS(5))

AND

C3bH_d0.z = C3b_d0.z

AND

(C3bH_d0.Tr <= (C3b_d0.Tr + 0.2)
AND C3bH_d0.Tr >= (c3b_d0.Tr - 0.2))

AND

(C3bH_d0.Tr <= (H_d0.Tr + 0.2)
AND C3b_Hd0.Tr >= (H_d0.Tr - 0.2)))



;

Vous parait-il correct? Il y a t-il des éspaces en trop, des parenthèses en trop, le point virgule à la fin est-il positionné correctement? Et enfin, ce code peut-il repondre à ma problématique? (je suis sous windows XP, je ne sais pas si c'est important)

Merci d'avance pour vos réponses,

Bonne journée à tous
A voir également:

3 réponses

hydroxyproline
6 avril 2009 à 14:37
j'ai oublié une condition

C3bH_d0.z = H_d0.z

^^
0
hydroxyproline
6 avril 2009 à 14:40
Encore une petite correction , je suis vraiment désolé, les mz spécifiques sont ceux qui ne repondront pas aux conditions, d'ou la présence du "NOT IN" dans mon code.

Cette fois vous devriez avoir tous les éléments
0
Bonjour,
Cette requète est effectivement syntaxiquement incorrecte (des ")" en trop).
Il y a egalement 2 fois la condiftion (C3bHd0.mz_do - C3bd0.mz_d0)/(C3bHdo.mz_d0)) <= ABS(5)
et 2 fois la condition ((C3bHd0.mz_do - Hd0.mz_d0)/(C3bHdo.mz_d0)) <= ABS(5)
ce qui est inutile car tous vos opérateurs sont des "and".
Certaines parenthèses sont également inutiles pour la même raison.
Enfin il y avait une petite faute dans le nom de la table dans la dernière condition.
A part ca, je ne vois rien de choquant à cette requète :
3 tables, une jointure sur le champ z, des conditions diverses ...
Je pense qu'effectivement elle pourra répondre à votre besoin.
SELECT C3bHd0.mz_d0 
FROM C3bHd0 
WHERE C3bHd0.mz_d0 NOT IN (
	SELECT C3bHd0.mz_d0 
	FROM C3bHd0,C3bd0,Hd0 
	WHERE ((C3bHd0.mz_do - C3bd0.mz_d0)/(C3bHdo.mz_d0)) <= ABS(5) 
		AND ((C3bHd0.mz_do - Hd0.mz_d0)/(C3bHdo.mz_d0)) <= ABS(5) 
		AND C3bH_d0.z = C3b_d0.z 
		AND C3bH_d0.z = H_d0.z 
		AND C3bH_d0.Tr <= (C3b_d0.Tr + 0.2) 
		AND C3bH_d0.Tr >= (C3_d0.Tr - 0.2) 
		AND C3bH_d0.Tr <= (H_d0.Tr + 0.2) 
		AND C3bH_d0.Tr >= (H_d0.Tr - 0.2)
);

Cordialement,
Jres

Ps: Les espaces sont non significatifs. Le point-virgule peut être placé n'importe où (enfin presque ;)
0