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

Développement SQL Server Discussion :

insert et sous requete.


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Points : 4
    Points
    4
    Par défaut insert et sous requete.
    Bonjour à tous,

    Je cherche à savoir s'il existe une syntaxe sql pour lire plusieurs champs dans une sous requête et mettre à jour plusieurs champs.

    J'explique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE MATABLE
    SET MONCHAMPS1=(SELECT CHAMPS FROM MATABLE WHERE ...),
    MONCHAMPS2=(SELECT CHAMPS FROM MAABLE WHERE ...)

    Tout ceci fonctionne mais n'est pas très performant.

    Je cherche le moyen de ne faire qu'une seule sous requête, car dans mon cas la sous requête est assez lourdes est est exécutée plus d'une fois !! ...

    Merci d'avance à ceux qui liront et à ceux qui répondront!

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Si toutes les clauses FROM des sous requêtes sont identiques et si également toutes les clauses WHERE des sous requêtes sont identiques (et portent sur la clé primaire) et si seuls les nom des champs changent, alors cela laisse fort à parier que la table faisant l'objet de l'Update est "dénormalisée". Cela arrive souvent dans les environnements OLAP où la base a fait l'objet d'une dénormalisation.

    Imaginons les 3 tables csuivantes :
    . Table Produit
    Produit (IdProduit, Nom, Prix, IdCategorie )
    . Table Catégorie
    Categorie (IdCategorie, Code, Libelle, FraisDePort)
    . Table ProduitEtCategorie ( table dénormalisée)
    ProduitEtCategorie(IdProduit, Nom, Prix, IdCategorie, Code, Libelle, FraisDePort)

    Si, dans la table ProduitEtCategorie, on veut mettre à jour les champs Code, Libelle, FraisDePort, depuis la table Categorie, on aurait tendance, de prime abord, à écrire ceci :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE A 
       SET A.Code = (SELECT A.Code FROM Categorie C WHERE C.IdCategorie = A.IdCategorie), 
           A.Libelle = (SELECT A.Libelle FROM Categorie C WHERE C.IdCategorie = A.IdCategorie), 
           A.FraisDePort = (SELECT A.FraisDePort FRom Categorie Z WHERE C.IdCategorie = A.IdCategorie) 
    FROM ProduitEtCategorie  A

    Une autre solution plus optimale serait de transformer la requête comme ceci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE A 
       SET A.Code = C.Code, 
           A.Libelle = C.Libelle,  
           A.FraisDePort = C.FraisDePort 
    FROM ProduitEtCategorie  A
    INNER JOIN Categorie C 
      ON C.IdCategorie = A.IdCategorie
    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci pour la réponse je me doutais bien qu'il devait y avoir une solution !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete INSERT avec sous-requête
    Par nemo67 dans le forum Développement
    Réponses: 4
    Dernier message: 19/09/2011, 14h07
  2. Insertion de données avec sous requete
    Par Invité dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/01/2009, 09h50
  3. INSERT avec une sous requete et des valeurs
    Par sabotage dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2008, 12h00
  4. requete d'insertion pour sous table
    Par lightedge dans le forum Langage SQL
    Réponses: 11
    Dernier message: 16/06/2007, 10h00
  5. [Sous requetes] insertion a partir d'un select
    Par max44410 dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/05/2007, 02h46

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