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 :

Une requête de mise à jour sur elle même [2012]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Par défaut Une requête de mise à jour sur elle même
    Bonjour à Tous,

    J'ai une table, avec un identifiant unique id

    Je dois mettre à jour des champs : busi, sap, pli pour un sous ensemble de ligne where compta = 55

    Les informations busi, code, pli sont disponible dans d'autre lignes de la table where compta <> 55 and busi is not null

    L'identifiant commun aux lignes avec 55 et sans 55 est code

    pour une ligne à mettre à jour, je peux avoir plusieurs lignes (contenant la même information)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update tbl set
    busi = (select busi from tbl T1 where tbl.code = T1.code and compta <> 55 and busi is not null) ,
    sap = (select sap from tbl T1 where tbl.code = T1.code and compta <> 55 and busi is not null) ,
    pli = (select pli from tbl T1 where tbl.code = T1.code and compta <> 55 and busi is not null) 
    where tbl.compta = 55
    Mes questions sont :
    Est ce que cela peut fonctionner sachant que
    select busi from tbl T1 where tbl.code = T1.code and compta <> 55 and busi is not null)
    va renvoyer plusieurs lignes ?
    Dois je faire une select TOP1 busi ... ?

    Avez vous une meilleur méthode, car j'ai peur que cela soit très très lent au vue du nombre de ligne de la table.

    Merci pour votre aide

  2. #2
    Membre chevronné
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Bonjour

    Effectivement le top 1 peut répondre a votre besoin mais pas de manière propre ...

    Maintenant pourquoi ne pas essayer avec cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE dest 
    SET dest.busi = ori.busi
    ,dest.sap = ori.sap
    ,dest.pli = ori.pli
    FROM tbl dest 
    INNER JOIN  tbl  ori on dest.code = ori.code
    WHERE ori.compta <> 55 
    AND ori.busi IS NOT NULL

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Par défaut
    Super, Merci,

    Mais la requete inner join va forcement renvoyer plusieurs lignes (c'est obligatoire) avec a chaque fois les même valeur

    Est ce que cela va être génant ?

    Merci

  4. #4
    Membre chevronné
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Essayez de lancer cette requete pour vérifier vos dire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM tbl dest 
    INNER JOIN  tbl  ori on dest.code = ori.code
    WHERE ori.compta <> 55 
    AND ori.busi IS NOT NULL
    Si c'est le cas effectivement ce n'est pas forcément la bonne solution ...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Par défaut
    Bonsoir,

    J'ai fini le test, cela semble fonctionner et lui pose aucun problème qu'il y a plusieurs lignes.

    Super et Merci

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

Discussions similaires

  1. Problème sur une requête de mise à jour entre 2 tables
    Par Throbb dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/03/2009, 14h43
  2. [SQL] Synthaxe dans une requête de mise à jour
    Par JEFKE dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 23/02/2008, 00h19
  3. Problème avec une requête de mise à jour
    Par Le Pharaon dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/07/2006, 12h16
  4. Réponses: 2
    Dernier message: 10/03/2006, 13h55
  5. Réponses: 6
    Dernier message: 29/11/2005, 19h36

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