Mettre plusieurs requetes en une seule

Résolu
enibib Messages postés 15 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 19 janvier 2010 - 24 mars 2009 à 16:13
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 25 mars 2009 à 18:25
Bonjour après une recherche sur plusieurs forum je n'arrive pas à trouver une solution a mon problème.

Voici a quoi ressemble mes 2 tables :
table_1 :
Id_1  - nom  -  prenom

table_2 :
Id_2 - rappel

et voici la requete que je voudrais faire (fausse bien pour le moment) désolé pour la syntaxe mais je pense que c'est plus explicite qu'un long discourt :SELECT * from table_1 WHERE ( table_1.Id_1 table_2.Id_2) AND WHERE (table_2.Rappel 'on' )
Jusqu'à présent je passé par plusieurs requêtes pour avoir mon résultat .Comment est-il possible de n'en faire qu'une seule svp?? <?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 11.25pt; HEIGHT: 11.25pt" alt="" type="#_x0000_t75"><v:imagedata o:href="http://www.sqlfr.com/imgs2/smile_blush.gif" src="file:///C:\DOCUME~1\dlebret\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></v:imagedata></v:shape>

5 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
24 mars 2009 à 17:01
bonjour

la clause WHERE ne doit apparaitre qu'une fois.
si tu veux mettre plusieurs conditions, tu les sépares uniquement par des opérandes logiques : AND, OR,...
avec des parenthèses si tu veux

d'autre part, il y a un autre problème dans ta requête, car tu fais des comparaison sur des champs de ta table 2, alors que celle-ci n'est pas spécifiée dans ta clause FROM. ça pourra pas fonctionner.

donc soit tu fais une jointure :
SELECT ID_1, Nom, Prenom
FROM Table_1, Table_2WHERE ( table_1.Id_1 table_2.Id_2) AND (table_2.Rappel 'on' )

soit tu passes par une requete imbriquée :
SELECT *
FROM Table_1
WHERE Id_1 IN (SELECT Id_2 FROM Table_2 WHERE Rappel = 'on')
3
enibib Messages postés 15 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 19 janvier 2010
24 mars 2009 à 17:12
Je te remerci pour ta réponse c'est exactement ce que je chercher et n'arrivé pas à faire .Je n'est pas testé mais les 2 solutions vont beaucoup m'aider
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
24 mars 2009 à 19:59
Salut,

tu peux utiliser les jointures

SELECT ID_1, Nom, Prenom
FROM Table_1
INENR JOIN Table_2 ON table_1.Id_1 = table_2.Id_2
WHERE table_2.Rappel = 'on'
0
enibib Messages postés 15 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 19 janvier 2010
25 mars 2009 à 09:08
Merci pour cette nouvelle solution mais j'ai résolu mon problème avec la solution précédente qui marche très bien :
SELECT *
FROM Table_1
WHERE Id_1 IN (SELECT Id_2 FROM Table_2 WHERE Rappel = 'on')

PS : Tu veu parler INNER JOIN surement ? faute de frappe mais à signaler quand même merci encore pour votre aide précieuse
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
25 mars 2009 à 18:25
Oui c'est innet join

La requete est plus performante et plus maintenable qu'avec une sous requete

elle est meme plus performante normalement que la from table1, table2
car il n'y a pas de produit cartesien (normalement les optimiseurs des bases de données l'optimise)

Bon SQL
0
Rejoignez-nous