3 tables avec requête complexe

Voilà mon problème :
J’ai 3 tables ‘FOURNITURES’, ‘FOURNISSEURS’, ‘PRIX’
Ces tables sont reliées entre-elle par une relation 1-n.

La table FOURNITURES :
idFourniture
Quantité
Description
…

La table FOURNISSEURS :
idFournisseur
Nom
Adresse
…

La table PRIX :
idExtFourniture
idExtFournisseur
Prix

Je désirais savoir à l’aide d’une requête SQL, pour chaque fourniture quelle est le fournisseur le moins chère, et ce, en une seul requête

Merci de votre aide.

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour, Je viens de lire votre question ( un peu tard), mais comme j'adore les req SQL, j'ai voulu seulement faire une remarque, La requête proposé par Tittom est la meilleur est marchera surement seulement pour améliorer le temps de réponse je crois qu'il est recommandé d'ajouter d'autre jointures au niveau table des prix "P2":

    SELECT idFourniture
    , Description
    , prix
    , idFournisseur
    , Nom
    , Adresse
    FROM fournisseurs, fournitures, prix p1
    WHERE idFournisseur = idExtFournisseur
    AND idFourniture = idExtFourniture
    AND prix = (
    SELECT MIN(p2.prix)
    FROM prix p2
    WHERE p2.idExtFourniture = p1.idExtFourniture
    and p2.idExtFournisseur = fournisseurs.idfournisseur
    and p2.idExtFourniture = fourniture.idfourniture)
    1. Contributeur
      Bonjour
      Moi, je le vois comme ça!!

      SELECT Description, Nom, Min(prix)
      FROM PRIX, FOURNISSEURS, FOURNITURES
      WHERE idExtFourniture=idFourniture
      AND idExtFournisseur= idFournisseur


      Bon courage

       Maily   :-)))) L'hirondelle ne fait pas le printemps
      mais le dromadaire fait le désert.
      1. Bonjour,

        La requête de Maily me semble douteuse (utilisation d'une fonction de regroupement MIN avec des colonnes normales sans GROUP BY).

        Essaye ceci :

        SELECT idFourniture
             , Description
             , prix
             , idFournisseur
             , Nom
             , Adresse
          FROM fournisseurs, fournitures, prix p1
         WHERE idFournisseur = idExtFournisseur
           AND idFourniture  = idExtFourniture
           AND prix = (
                        SELECT MIN(p2.prix)
                          FROM prix p2
                         WHERE p2.idExtFourniture = p1.idExtFourniture
                      )
        


        -- 
        Tittom (ça c'est de la signature)
        1. Super TITTOM cela fonctionne.
          Grand merci pour ta réponse.

          Merci aussi à maily