begin process at 2010 02 10 08:08:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Requêtes

 > 

Requête de débutant...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Requête de débutant...

lundi 4 mai 2009 à 13:05:45 | Requête de débutant...

HWO

Bonjour, Je viens d'installer SQL SERVEUR 2008 EXPRESS + sqlManagement studio et je bloque sur l'écriture de la première requête. J'ai créé un petite base qui dipose de 2 tables, 1 "fournisseurs" et une autre "produits". Dans la table produit il y a 2 colonnes "fournisseur_1" et "fournisseurs_2" + d'autre. Le nom du fournisseur se trouve dans la table "founisseur". La requéte suivante me donne bien le nom des fournisseur_1 SELECT dbo.Fournisseurs.SocieteNom AS F_1, dbo.Produits.Reference FROM dbo.Fournisseurs INNER JOIN dbo.Produits ON dbo.Fournisseurs.FournisseurID = dbo.Produits.Fournisseur_1 Par contre je n'arrive pas écrire la requéte que me donnerai comme résultat 3 colonnes à savoir la ref le nom de fournisseur_1 et le nom du fournisseur_2 s'il existe..... PAr avance merci de votre aide.
lundi 4 mai 2009 à 17:56:37 | Re : Requête de débutant...

MoH008

Salut,
j'ai une petite question à te poser : est ce vraiment utile à ce moment de savoir si il y a un second fournisseur ?

Je veux dire tu peux faire :
SELECT dbo.Fournisseurs.SocieteNom1 AS F_1, dbo.Fournisseurs.SocieteNom2 AS F_2, dbo.Produits.Reference FROM dbo.Fournisseurs INNER JOIN dbo.Produits ON dbo.Fournisseurs.FournisseurID = dbo.Produits.Fournisseur_1


et par la suite vérifier si la colonne F_2 est vide ou pas,non?


The possible meet the impossible to become the possimpible !!
mardi 5 mai 2009 à 10:07:19 | Re : Requête de débutant...

HWO

Merci de ton aide, La requete que tu me donne ne retourne pas le résultat. Je cherche à avoir un tableau qui me donne pour tous les produits la liste des fournisseurs, dans la colonne fournisseur_1 je veux le nom du fournisseur alors que dans la table produits je trouve l'ID du fournisseur, et la même chose dans la colonne fournisseur_2. Je suis vraiment débutant en SQL (depuis hier) c'est ma première requête, peut-être est ce impossible ? Vaut-il passer par une vue intermédiare dans laquelle on retrouverai la liste des fournisseurs2 ? Peut-on dans une même requete pointer deux fois sur une même colonne d'une jointure ?
mardi 5 mai 2009 à 14:57:16 | Re : Requête de débutant...

MoH008

Réponse acceptée !
Salut,
As tu adapté ma requête parce que telle quelle, c'est sûr qu'elle ne fonctionnera pas ?!

étant donné que tu es débutant, te serait-il possible de me fournir le schéma relationnel pour fournisseur et produit au moins? (ex : nom_table(champ1, champ2....)

Il est normal que tu retrouves l'id du fournisseur dans ta table produit, il s'agit de la clef primaire (grâce à une clef primaire tu détermines une et une seule occurence de la table) de la table fournisseur.

Pas besoin de trop te compliqué la vie, une requête suffit à ce que tu veux faire !

The possible meet the impossible to become the possimpible !!
mardi 5 mai 2009 à 15:01:30 | Re : Requête de débutant...

aieeeuuuuu

Réponse acceptée !
Bonjour

Tout d'abord, il y a quelques problems au niveau conceptuel dans la structure de base : mettre deux champs poru les fournisseurs n'est pas une bonne idee, i leut fallu trois tables : Fournisseurs (IDFournisseur, Nom, Raisonsociale,...), une table produits (IDProduit, nom, description,...) et une table Fournisseurs_produit (IDFournisseur, IDProduit)

mais je pense que le but de votre base est plutot de "prendre en main" le SQL.

pour votre probleme, il doit pouvoir se resoudre comme ceci :
SELECT produit.Reference, F1.Nom, F2.Nom
FROM Produit
INNER JOIN Fournisseur F1 ON (Produit.Fournisseur_1 = F1.FournisseurID)
LEFT OUTER JOIN Fournisseur F2 ON (Produit.Fournisseur_2 = F2.FournisseurID)

Ca devrait faire l'affaire.
si le resultat n'est pas celui attendu, précisez le resultat obtenu, et celui désiré afin qu'on y voit plus clair.
mardi 5 mai 2009 à 15:34:21 | Re : Requête de débutant...

HWO

Merci beaucoup à vous deux, si j'ai bien compris un alias de table (ici F1 et F2) ne peut être utilisé qu'une seule fois dans une requête ? Il subsiste encore une part d'ombre dans ma tête, pour quoi un INNER JOIN à la place du LEFT OUTER JOIN ne donne pas le même résultat vu qu'a priori on travaille sur deux objets distincts F1 ET F2 ? J'avance, j'avance je vois de la lumière....
mardi 5 mai 2009 à 16:24:51 | Re : Requête de débutant...

aieeeuuuuu

Réponse acceptée !
re,

non, en fait tu peux utiliser les alias autant de fois que tu veux.
pour tes fournisseurs, si tu veux recuperer leur nom et leur adresse par exemple, tu pourra faire F1.nom, F1.adresse, F2.nom, F2.adresse.

en fait ce que je fais dans la requete, c'est que j'apelle DEUX FOIS la meme table, c'est pourquoi j'utilise des alias, pour différencier
Je fais d'abord une jointure de la table fournisseur sur le champs fournisseur_1 de la table Produit, pour avoir le nom du fournisseur précisé dans la colonne fournisseur_1 de chaque produit
Ensuite je fais une jointure sur la colonne fournisseur_2,...

pour ce qui est du LEFT OUTER JOIN, pour la deuxieme jointure, ca permet d'afficher quand meme les resultat de la premiere jointure, meme si il n'y a pas de correspondance pour la deuxieme jointure (en gros, c apermet d'afficher quand meme les produits qui n'ont pas de fournisseur2)

(en fait pour mieux comprendre la requete, tu pourrais considerer que les fournisseur dont l'ID est dans la colonne fournisseur1 de la table produit sont contenus dans une table qui s'apelle F1, et que les fournisseur contenus dans la colonne Fournisseur2 sont contenus dans une autre table qui s'apelle F2, sauf que dans ton cas, tous les fournisseurs sont contenus dans la meme table, que l'on apelle donc deux fois)



mardi 5 mai 2009 à 16:50:49 | Re : Requête de débutant...

HWO

Bon, d'accord mais alors, pourquoi la requete suivante est erronnée : SELECT dbo.Produits.Reference, F1.SocieteNom as Fournissuer_principal, F1.SocieteNom AS Fournisseur_Autre FROM dbo.Produits INNER JOIN dbo.Fournisseurs AS F1 ON dbo.Produits.Fournisseur_1 = F1.FournisseurID LEFT OUTER JOIN ON dbo.Produits.Fournisseur_2 = F1.FournisseurID Je pense que c'est parce que j'utilise deux fois F1.SocieteNom dans le select n'est ce pas ? Si c'est le cas, je me suis mal exprimé dans le post précédent, et je voulais dire que l'on ne peut pas utiliser deux fois la même "colonne" d'un alias dans une même requête.
mardi 5 mai 2009 à 18:46:21 | Re : Requête de débutant...

aieeeuuuuu

La requete ne fonctionne pas car il manque le nom de table pour la deuxieme jointure.

pour ce qui est d'utiliser deux fois la meme colonne, rien ne t'en empeche, mais il n'y a aucun interet, car ca te retournera deux fois la meme chose !!!!!

Le probleme ici c'est que tu as pour UN produit, DEUX Id de fournisseurs rattachés. il faut donc que tu aille chercher une fois le nom du fournisseur 1, puis le fournisseur 2, il te faut donc deux jointures. tu pourrais recuperer simplement tes informations avec une seule jointure, mais le resultat serait sur deux ligne, et non une seule :
PRODUIT1;FOURNISSEUR1
PRODUIT1;FOURNISSEUR2



Cette discussion est classée dans : requête, fournisseur, produits, fournisseurs, dbo


Répondre à ce message

Sujets en rapport avec ce message

Dans une requête, ajouter un champ "ordre" qui s'incrémente [ par GAMBERGE ] Bonjour, Je cherche à écrire une requête SQL Access issue d'une table COMMANDES permettant d'ajouter un champ "Ordre" qui s'incrémente pour chaque fou Requête FTS sur vue. [ par gillou1664 ] Bonjour tout le monde.Bon, je suis pas très bon en SQL et j'ai un petit soucis (enfin gros :p) : J'essaie d'utiliser une fonction de recherche de text requete sql [ par fraiza ] slt,j'ai besoin d'une requête qui donne les interventions qui ont le même code employé et qui ont la même date.sachant que ces champs se trouvent dans Lier un classeur Excel à une requête Bo Xi [ par marie_2580 ] Bonjour, Je commence juste à travailler sous BO Xi et je dois réaliser une requête à partir d'un univers Bo gérant une liste de client. Je souhaite r Requête apparement pas facile... [ par conan76 ] Bonjour,Je tente depuis hier de faire une requête SQL un peu particulière et qui ne semble pas évidente. Alors je vais tenter de vous expliquer ce que Requête select une ligne sur deux [ par Mayzz ] Bonjour à tous,Voila, je fais un site en ASP.NET et j'ai une requête spécifique à faire.Je souhaiterai faire une requête select dans un dataset (Table Problème d'alias sur table dérivée (sous-requête) [ par dthuler ] Bonjour,J'ai un gros problème que je n'arrive pas à isoler dans une requête MySQL;La requête suivante me donne l'erreur "Every derived table must have demande de l'aide sur une requete ! [ par tahtouh ] Bonjours  ,     j'arrive pas a trouver une requete  sql qui peu me servire sur  ce cas  :j ai deux table transaction et client je  veux  avoir la somm Requête table intermédiaire (AND) [ par ikan66 ] Bonjour à tous,Je souhaite écrire une requête permettant d'interroger une table intermédiaire comprenant les champs : journal_id et domaines_id. Table Requête dans Visual Studio 2008 à partir d'une BDD Access 2007 [ par LordKelvin ] Bonjour, J'ai connecté, dans Visual Studio 2008, une BDD Access 2007, et déjà première chose qui me chiffonne : les requêtes créées sous Access appar


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,061 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales