Requete SQL - (ouiiiiiin.... Calimero style...)

Salut

Bon, je sais que vous aimez pas ca (et moi non plus dans ces cas-la), mais etant loin d’etre un specialiste du SQL, j’arrive vraiment pas a m’en sortir avec ma requete… Donc j’aimerais que quelqu’un me fasse le boulot :paf:

J’ai deja decomposé la requete elle-meme, mais il doit y avoir moyen de faire ca proprement (une vague histoire de JOIN je suppose, mais yen a tellement, des external, natural, right, left, etc… que je m’y perds…)


SELECT Frame, Pbsur, Pbcal
FROM PB
WHERE idParamPB= (SELECT idParamPB
                  FROM ParamPB
                  WHERE idMolecule = ( SELECT idMolecule
                                       FROM Molecule
                                       WHERE Name = "XXX")
                  AND idTraj = ( SELECT idTraj
                                 FROM Trajectory
                                 WHERE Name = "YYY")
                   AND idPrmtop = ( SELECT idPrmtop
                                    FROM Prmtop
                                    WHERE Name = "ZZZ")
                   )


Edit : XXX, YYY et ZZZ sont des noms que je ferais varier dans mon programme, ou que l’user rentrera… enfin ca, je m’arrangerai par la suite

Franchement, vous me sauveriez la vie…

J’ai un schema pour peut-etre mieux comprendre ici :
http://www.ibpc.fr/Perso/Nicolas.Guiot/img/DB_Complex_V4.png

Merci d’avance

C’est bien de demander qu’on te fasse le boulot, mais on sait pas ce que tu veux faire au juste…

Excuse nous mais nous ne sommes pas pour la plupart super callés en physique. :heink:

Alors si tu nous expliques clairement ce que tu veut on pourra peut-être t’aider

Tout le monde ne s’appelle pas Nostradamus :smiley:

Ah… pardon, j’avais cru etre clair

L’objectif, c’est de partir d’un nom de Molecule, d’un nom de Trajectoire, d’un nom de Prmtop, et d’obtenir tous les enregistrements de la table PB qui correspondent à ces noms (en passant par l’idParamPB, qui fait le lien entre la table PB et les autres…)

Besoin de plus de precisions ?

C’est ce que j’avais cru comprendre hier soir avant d’éteindre en lisant ta requête. perso, je ne fait jamais de requêtes imbriquées, plutôt des jointures (c’est ce que tu entendait par “join” ?)
Maintenant, une jointure sur 4 tables à la fois, ça risque d’être un peu lourd, à tester donc:


SELECT PB.Frame, PB.Pbsur, PB.Pbcal
FROM PB,ParamPB,Molecule,Trajectory,Prmtop
WHERE PB.idParamPB= ParamPB.idParamPB 
  AND ParamPB.idMolecule = Molecule.idMolecule
  AND Molecule.Name = "XXX")
  AND ParamPB.idTraj Trajectory.idTraj
  AND Trajectory.Name = "YYY"
  AND ParamPB.idPrmtop = Prmtop.idPrmtop
  AND Prmtop.Name = "ZZZ"
;

Je ne te dis pas que ça marche tel quel, quand il y a ambiguité enter les noms de colonne, il faut préfixer par le nom de “table.”, ou alors ajouter le keyword “AS” pour nommer tes tables.
Bref, la jointure, c’est plusieurs tables dans ton from, et l’égalité des id entre toutes les tables. un jointure entre PB et paramPB, et d’autres jointures entre paramPB et Molecule, Trajectoire, Prmtop.
Sinon, avec un langage de prog, je ferai plutot une methode pour récupérer test 3 ids sépraéments, et éventuellement une seule jointure entre ParamPB et PB pour récupérer ton résultat final. surtour que les méthodes pour récupérer les id risquent d’être réutilisables.
Sympa le schema, c’est utile pour comprendre, et beaucoup de spécifieur oublient de nous donner ce genre de chose.

Ah ben ca alors… :ouch:

finalement, c’est une requete super simple !!
Je m’attendais a avoir des jointures de partout (enfin des “join” quoi…), et finalement, c’est du simple Select… From… Where avec des conditions de partout…

Bah merci beaucoup :slight_smile: (en tous cas ca a l’air de donner ce que je veux, je reviendrai si c’est pas le cas…)

Au passage, si ya des puristes SQL qui pensent qu’on peut optimiser la requete (et qui savent le faire :hello: , je vous en prie :slight_smile:

Content d’avoir pu aider :super:
Sympa ton site perso :smiley: tu bosse au CNRS à Lyon?

nop, Paris : pour + de details, gardes que le nom de domaine, mon labo (enfin celui pour lequel je bosse…) c’est UPR-9080


SELECT PB.Frame, PB.Pbsur, PB.Pbcal
FROM PB,ParamPB,Molecule,Trajectory,Prmtop
WHERE PB.idParamPB= ParamPB.idParamPB 
  AND ParamPB.idMolecule = Molecule.idMolecule
  AND Molecule.Name = "XXX")
  AND ParamPB.idTraj Trajectory.idTraj
  AND Trajectory.Name = "YYY"
  AND ParamPB.idPrmtop = Prmtop.idPrmtop
  AND Prmtop.Name = "ZZZ"
;

Heu le produit cartésien que fait deltree (ie: FROM a, b, …, c + WHERE a.id = b.id) c’est une requête de jointure hein…