jon152 Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 Bonjour alors je suis entrain de galerer sur une requete SQL et je suis perdu Les infos dont je dispose : Alors j’ai 3 tables Nommé Doc, Yref et VariableValue Dans Doc j’ai les colonnes suivantes DocID et filename Dans Yref j’ai DocID et YrefDoc Dans VariableValue j’ai DocID et variableID En entrée j’ai un filename Je souhaite obtenir le valuetext d’un autre Filnename qui est associé aux premier Filename Ma démarche : En entrée j’ai un Filename (exemple : AAA) qui peut me donner un DocID (ce DocID est unique) (ce Filename(AAA) d’entrée il y en a qu’un qui aura ce nom dans la base par contre d’autres FileName sont présent en plusieurs exemplaires il y aura plusieurs feuille<1> par exemple avec des DocID différents) Ce DocID me permet de lister tous les YrefDoc liés à ce Doc ID. (même si ce n’est pas écrit mais ce YrefDoc correspond aux DocID) (j’ai l’impression qu’il y a comme un mappage) Il me faut le numéro YrefDoc dont le filename est feuille<1> (mais comme il y en a une multitude de feuille<1> il me faut celui qui est en rapport avec mon filename AAA) Ensuite de ce feuille<1> je souhaite obtenir le VariableValue d’une variable qui se nomme 84. Si quelqu'un peut m'aider merci d'avance SELECT * FROM dbo.VariableValue FULL JOIN dbo.Documents ON dbo.VariableValue.DocumentID = dbo.Documents.DocumentID FULL JOIN dbo.Xrefs ON dbo.Documents.DocumentID = dbo.Xrefs.XRefDocument where dbo.Documents.DocumentID IN (select DocumentID from dbo.VariableValue where Filename = 'CP05L10131E (5).SLDPRT') Lien vers le commentaire Partager sur d’autres sites More sharing options...
latlanh Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 J'ai vomis avec la couleur! Lien vers le commentaire Partager sur d’autres sites More sharing options...
fragzepika Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 à l’instant, latlanh a dit : J'ai vomis avec la couleur! +1 avce le thème sombre, c'est juste horrible . bon maintenant, je vais essayer de comprendre le problème (le sql me manque). Lien vers le commentaire Partager sur d’autres sites More sharing options...
latlanh Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 Il y a un gros pb de conception de base non? Lien vers le commentaire Partager sur d’autres sites More sharing options...
fragzepika Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 Ce que je ne comprends pas , c'est la relation possible (s'il y en a une) entre les filename. Et je suppose que valueText est une colonne de VariableValue (ce qui n'est pas précisé dans la description des tables) Lien vers le commentaire Partager sur d’autres sites More sharing options...
latlanh Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 De ce que j'ai compris : une table doc avec une ref+ un nom de fichier une table avec un deux clé étrangere vers la mm table (la table doc) avec genre une ref parent et une ref enfants ( pour avoir plusieur enfant pour le même fileName) et une troisieme avec une clé etrangere vers doc et une vers une table variable inconnu A ca moi je dis que la deuxième table devrai pas exister... une clé étrangère vers le parent directement dans la table doc suffirai... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Soltek Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 (j'ai eu pitié de vos mirettes) Lien vers le commentaire Partager sur d’autres sites More sharing options...
fragzepika Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 @jon152 ton post est malheureusement assez confus. Quelques conseils pour tes prochaines questions. Pour faciliter la lecture, il faudrait que tu donnes le nom exact de tes tables/colonnes et que tu t'y tiennes dans le reste du texte. Les noms dans ta requete sont différents de ceux cités plus haut. De plus, certaines tables semblent incomplètes. D'où vient " valuetext " ? Enfin, identifie clairement les valeurs (entre " " par exemple). Si j'ai bien compris, la table YrefDoc est une table de jointure entre DOC et elle même, comme le dit Lalanth. Cette table est inutile si la relation est 1,n (les documents enfants ne peuvent avoir qu'un document parent). Sinon, elle est obligatoire. La table VariableValue est une table contenant les variables pour un DOC donné (d'où la FK DocId). Et ce que tu cherches, c'est la ligne de VariableValue liés aux documents enfants d'un document donné, et pour un variableID donné. Ca devrait donner quelque chose du genre (ce qui ressemble bcp à ta requête) select var_c.* from YrefDoc left join Doc doc_c on doc_c.DocId = y.YrefDoc left join VariableValue var_c on var.docId = y.YrefDoc where y.DocId in ( select doc_p.docId from Doc doc_p where doc_p.filename = <nom du filename> ) and var_c.variableId = <id de la variable> requête inutilement compliquée et avec des fautes. Ca m'apprendra à ne pas me relire. Voir plus bas Lien vers le commentaire Partager sur d’autres sites More sharing options...
Chocobidou Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 il y a 8 minutes, fragzepika a dit : @jon152 ton post est malheureusement assez confus. Quelques conseils pour tes prochaines questions. Pour faciliter la lecture, il faudrait que tu donnes le nom exact de tes tables/colonnes et que tu t'y tiennes dans le reste du texte. Les noms dans ta requete sont différents de ceux cités plus haut. De plus, certaines tables semblent incomplètes. D'où vient " valuetext " ? Enfin, identifie clairement les valeurs (entre " " par exemple). Si j'ai bien compris, la table YrefDoc est une table de jointure entre DOC et elle même, comme le dit Lalanth. Cette table est inutile si la relation est 1,n (les documents enfants ne peuvent avoir qu'un document parent). Sinon, elle est obligatoire. La table VariableValue est une table contenant les variables pour un DOC donné (d'où la FK DocId). Et ce que tu cherches, c'est la ligne de VariableValue liés aux documents enfants d'un document donné, et pour un variableID donné. Ca devrait donner quelque chose du genre (ce qui ressemble bcp à ta requête) select var_c.* from YrefDoc left join Doc doc_c on doc_c.DocId = y.YrefDoc left join VariableValue var_c on var.docId = y.YrefDoc where y.DocId in ( select doc_p.docId from Doc doc_p where doc_p.filename = <nom du filename> ) and var_c.variableId = <id de la variable> Le script de création des tables ainsi que du contenu est un plus Lien vers le commentaire Partager sur d’autres sites More sharing options...
latlanh Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 il y a 1 minute, djey37 a dit : Le script de création des tables ainsi que du contenu est un plus Ou au moins un MCD ou MLD ou MPD pour y voir claire!^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
fragzepika Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 il y a 9 minutes, djey37 a dit : Le script de création des tables ainsi que du contenu est un plus Effectivement, ça aurait été le plus simple surtout qu'il y a peu de tables et qu'elles sont petites. il y a 9 minutes, latlanh a dit : Ou au moins un MCD ou MLD ou MPD pour y voir claire!^^ Ca, ce serait le pied. Mais, ces documents sont malheureusement trop rares. Lien vers le commentaire Partager sur d’autres sites More sharing options...
latlanh Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 il y a 1 minute, fragzepika a dit : Effectivement, ça aurait été le plus simple surtout qu'il y a peu de tables et qu'elles sont petites. Ca, ce serait le pied. Mais, ces documents sont malheureusement trop rares. A ben chez nous on le fait tout le temps (c'est bien le seul truc...) Lien vers le commentaire Partager sur d’autres sites More sharing options...
cadegenere Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 Moi j'ai compris ça : select v.VariableID from Yref y left join VariableValue v on (y.DocID = v.DocID) where y.YrefDoc in ( select d.DocID from Doc d where d.FileName = 'AAA') ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
fragzepika Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 il y a 5 minutes, cadegenere a dit : Moi j'ai compris ça : select v.VariableID from Yref y left join VariableValue v on (y.DocID = v.DocID) where y.YrefDoc in ( select d.DocID from Doc d where d.FileName = 'AAA') ) Putain ... tu as raison, j'ai une jointure en trop. Ca ne sert à rien de joindre à Doc pour les docuemernts enfants, on a besoin que de leurs Id déjà données par la colonne YrefDoc dans Yref. Ca donnerait donc ça (en ajoutant la contrainte sur l'id de la variable) : select var_c.* from YrefDoc y left join VariableValue var_c on var_c.docId = y.YrefDoc where y.DocId in ( select doc_p.docId from Doc doc_p where doc_p.filename = <nom du filename> ) and var_c.variableId = <id de la variable> Lien vers le commentaire Partager sur d’autres sites More sharing options...
cadegenere Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 il y a 3 minutes, fragzepika a dit : Putain ... tu as raison, j'ai une jointure en trop. Ca ne sert à rien de joindre à Doc pour les docuemernts enfants, on a besoin que de leurs Id déjà données par la colonne YrefDoc dans Yref. Ca donnerait donc ça (en ajoutant la contrainte sur l'id de la variable) : select var_c.* from YrefDoc y left join VariableValue var_c on var_c.docId = y.YrefDoc where y.DocId in ( select doc_p.docId from Doc doc_p where doc_p.filename = <nom du filename> ) and var_c.variableId = <id de la variable> C'est pas le variableId qu'il veut obtenir justement (celui que tu passes en condition) ? Ou c'est que je n'ai pas bien compris ce que valueText était (ni où il était d'ailleurs). Lien vers le commentaire Partager sur d’autres sites More sharing options...
fragzepika Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 à l’instant, cadegenere a dit : C'est pas le variableId qu'il veut obtenir justement (celui que tu passes en condition) ? Ou c'est que je n'ai pas bien compris ce que valueText était (ni où il était d'ailleurs). @jon152 a dit : Citation Ensuite de ce feuille<1> je souhaite obtenir le VariableValue d’une variable qui se nomme 84. Donc, j'ai supposé que ça deviat être le variableId. On rejoint le problème que j'ai remonté dans ma première réponse : la description du problème est confuse. Lien vers le commentaire Partager sur d’autres sites More sharing options...
cadegenere Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 il y a 3 minutes, fragzepika a dit : @jon152 a dit : Donc, j'ai supposé que ça deviat être le variableId. On rejoint le problème que j'ai remonté dans ma première réponse : la description du problème est confuse. Ah effectivement, je n'avais pas compris l'énoncé dans ce sens. Lien vers le commentaire Partager sur d’autres sites More sharing options...
jon152 Posté(e) le 21 mars 2017 Auteur Partager Posté(e) le 21 mars 2017 Je suis désolé pour la mise en forme et les couleurs :/ En plus d'etre nul en SQL je suis colorBlind :) alors je suis désolé pour les explications un peu confusent mais ça fait 2 ou 3 jours que je m'énerve dessus je viens de me rendre compte que j'ai oublié de dire que dans la tableVariableValue il y a un champ valuetext Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cara62 Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 Il nous faudrait les relations entre les tables aussi... Ce que je comprends pas, tu as le champ docID dans tes 3 tables, hors tu veux récupérer le valueText en fonction de ce docID non ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
linconnu Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 Ça serait pas plus simple de tout mettre dans la même table ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
revker Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 Salut, De ce que j'ai compris par rapport au schéma (je n'ai pas tout lu). Déjà, tes tables sont mal nommées à mon avis ^^. Elles sont censées représenter des objets métier j'imagine. Il serait donc bien qu'on comprenne directement leurs contenus sans devoir les requêter. Ensuite, quelles sont les cardinalités entre les trois tables ? Ce que tu en dis n'est pas très clair. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Chocobidou Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 Il y a 2 heures, jon152 a dit : Je suis désolé pour la mise en forme et les couleurs :/ En plus d'etre nul en SQL je suis colorBlind :) alors je suis désolé pour les explications un peu confusent mais ça fait 2 ou 3 jours que je m'énerve dessus je viens de me rendre compte que j'ai oublié de dire que dans la tableVariableValue il y a un champ valuetext J'insiste pour avoir les scripts de création de tables. Sur ton schéma, on ne voit pas les cardinalités, les FK et les PK. Cela va nous aider pour savoir dans un 1er temps si tu as fait une erreur de conception de BDD. Quel IDE utilises tu pour executer tes requetes SQL ? php my admin ? sql developper ? autre. Plus tu nous fournis d'informations et plus nous pourrons t'aiguiller sur la solution la plus logique. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Chocobidou Posté(e) le 21 mars 2017 Partager Posté(e) le 21 mars 2017 Je pense que la modélisation devrait ressembler à ça mais y a un truc qui m’échappe au niveau de cardinalité Lien vers le commentaire Partager sur d’autres sites More sharing options...
cadegenere Posté(e) le 22 mars 2017 Partager Posté(e) le 22 mars 2017 @djey37 Si j'ai bien compris, les YrefDocs sont aussi des clés vers Document. Et je ne suis pas sûr que le YrefsId existe. Pour le reste, ça doit ressembler à ça oui. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Chocobidou Posté(e) le 22 mars 2017 Partager Posté(e) le 22 mars 2017 il y a 13 minutes, cadegenere a dit : @djey37 Si j'ai bien compris, les YrefDocs sont aussi des clés vers Document. Et je ne suis pas sûr que le YrefsId existe. Pour le reste, ça doit ressembler à ça oui. J'ai rajouté le yrefsid parce qu'il n'y a pas d'identifiant sur cette table dans l'énoncé de @jon152 ce qui me parait aberrant. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.