IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Besoin d'aide pour une requête SQL


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut Besoin d'aide pour une requête SQL
    Bonjour,

    Voici mon problème :
    Je dispose de 3 tables, tableA, tableB, tableC qui se lient de la manière suivante

    tableA | tableB | tableC
    Code----Code | Prix
    Prix | Id------Id

    Je voudrait mettre a jour le prix de la tableC grâce au prix de la tableA

    J'ai essayer la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE tableC SET Prix = (SELECT tableA.Prix
    FROM tableC INNER JOIN
    tableB ON tableC.Id = tableB.Id INNER JOIN
    tableA ON tableB.Code = tableA.Code) 
     
    WHERE tableC.Id = (SELECT tableB.Id
    FROM tableC INNER JOIN
    tableB ON tableC.Id = tableB.Id INNER JOIN
    tableA ON tableB.Code = tableA.Code)
    Mais j'obtiens l'erreur suivante :

    Serveur*: Msg 512, Niveau 16, État 1, Ligne 1
    La sous-requête a retourné plusieurs valeurs. Cela n'est pas autorisé quand la sous-requête suit =, !=, <, <= , >, >= ou quand elle est utilisée en tant qu'expression.
    L'instruction a été arrêtée.
    Est ce que le problème vient de ma requête ?

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Faites simple !

    Essayez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE dbo.tableC
    SET Prix = A.prix
    FROM dbo.TableC AS C
    JOIN dbo.tableB AS B
    	ON C.Id = B.Id
    JOIN dbo.TableA AS A
    	 ON B.Code = A.Code
    @++

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut
    Bonjour,

    Un grand merci sa fonctionne très bien

    Cependant je voudrais ajouter une condition sur le champ 'Type' de la tableC

    Ma requête deviens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE dbo.tableC
    SET Prix = A.prix
    WHERE tableC.Type='A'
    FROM dbo.TableC AS C
    JOIN dbo.tableB AS B
    	ON C.Id = B.Id
    JOIN dbo.TableA AS A
    	 ON B.Code = A.Code
    Seulement j'obtiens l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Syntaxe incorrecte vers le mot clé 'FROM'.
    Avez-vous solution ?

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Par défaut
    Bonjour,

    Je crois qu'il faut mettre la condition FROM ainsi que les JOINTURES avant la condition WHERE mais je peux me tromper.

    cordialement

  5. #5
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut
    Oui désoler ....

    La requête deviens donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE dbo.tableC
    SET Prix = A.prix
    FROM dbo.TableC AS C
    JOIN dbo.tableB AS B
    	ON C.Id = B.Id
    JOIN dbo.TableA AS A
    	 ON B.Code = A.Code
    WHERE tableC.Type='A'
    Mais j'obtiens l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le préfixe de colonne 'tableC' ne correspond ni au nom de table ni au nom d'alias utilisés dans la requête.
    Alors que mon nom de champ est correct

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Par défaut
    bonjour,

    ah je n'avait pas vu les "dbo.".

    dbo pour database object.

    retire les dbo. devant les noms de tes tables.

    Un autre élément me parait bizarre dans la syntaxe de tes jointures.

    Si je dit pas de betise la syntaxe est INNER JOIN.

    Mais vu qu'il existe plusieurs type de jointure je ne sais pas laquelle tu souhaites utilisé.

    Je pense que ca devrait resoudre ton soucis.

    ++

Discussions similaires

  1. besoin d'aide pour une requête SQL
    Par cedrix57 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/01/2010, 10h47
  2. Besoin d'aide pour une requête SQL
    Par sexy-meta dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/07/2008, 14h36
  3. Besoin d'aide pour une requête SQL
    Par FranckyVegas dans le forum Langage SQL
    Réponses: 7
    Dernier message: 27/05/2008, 20h16
  4. Besoin d'aide pour une requête SQL
    Par Borami dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2005, 10h33
  5. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo