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 :

Update d'une table via 2 " inner join"en série


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Update d'une table via 2 " inner join"en série
    Bonjour à tous,
    je rencontre un souci pour réaliser un update du nombre d'incidents déjà réalisés sur un Asset
    pour récupérer ces informations j'ai 3 tables liées entre elles (en série)
    • 1) Table incident : im_incident
    • 2) Table vie de l'asset : usr_asssetlifecyle
    • 3) Table Asset : cf_config_item

    elles sont liées entre elles ainsi 1->2 ->3
    avec les jointures suivantes
    • im_incident (champ: usr_assetlicyle) vers table usr_assetlifecyle (champ: pm_guid)
    • usr_assetlifecyle (champ: usr_configitem) vers table cf_config_item (champ: cf_guid)




    donc j'ai écrit ce script mais cela ne fonctionne pas car l'éditeur SQL refuse la syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update cf_config_item
    inner join cf_config_item on A.usr_configitem = C.cf_guid
    inner join usr_assetlifecyle A on I.pm_guid = A.pm_guid
    set C.usr_nombredereparation = C.usr_nombredereparation+1
    where I.usr_assetlifecyle = A.pm_guid and A.usr_config_item = C.cf_guid
    merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 249
    Points : 12 895
    Points
    12 895
    Par défaut
    Bonjour,
    La bonne syntaxe est celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Update MaTable
    Set ...
    From MaTable
    Inner Join AutreTable On ...
    Si tu veux réutiliser la table à mettre à jour dans une des jointures, il faut utiliser un alias.

    Tatayo.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Désolé mais ça ne fonctionne pas mieux

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 249
    Points : 12 895
    Points
    12 895
    Par défaut
    Ca ne fonctionne pas, c'est quand même un peu vague.
    Est-ce que tu peux nous monter ta requête ?
    Quel est l'erreur ?

    Tatayo.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    désolé je n'etais pas connecté ce W.E

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    update cf_config_item as C
    set usr_nombredereparation = usr_nombredereparation+1
    from cf_config_item C
    inner join cf_config_item as CI on A.usr_configitem = CI.cf_guid
    inner join im_incident as I on I.pm_guid = A.pm_guid
    inner join usr_assetlifecyle as A on I.pm_guid = A.pm_guid
    where I.usr_assetlifecyle = A.pm_guid and A.usr_configitem = CI.cf_guid

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 249
    Points : 12 895
    Points
    12 895
    Par défaut
    Il manque toujours le message d'erreur…

    Quoi qu'il en soit, tu as quelques soucis dans ta requête:
    • Tu as une jointure sur l'alias A, qui n'apparait que plus loin dans la requête: inner join cf_config_item as CI on A.usr_configitem = CI.cf_guid
      A ma connaissance SqlServer ne le permet pas (en tout cas la version que j'utilise).
    • Tu as des redondances dans les jointures:
      inner join im_incident as I on I.pm_guid = A.pm_guid
      inner join usr_assetlifecyle as A on I.pm_guid = A.pm_guid
      Quelque chose me dit que tu te mélanges les pinceaux dans les alias de la table cf_config_item, que tu définis 2 fois d'ailleurs.
    • tu as un critère de jointure qui apparaît aussi dans la clause WHERE: inner join cf_config_item as CI
      on A.usr_configitem = CI.cf_guid
      A.usr_configitem = CI.cf_guid
    • Est-ce que usr_assetlifecyle est une table, ou une colonne ? usr_assetlifecyle <=> I.usr_assetlifecyle


    La syntaxe est plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    update t1 set colx = 1
    from MaTable as t1
    inner join MaTable as t2 on ...
    Bref il faut remettre de l'ordre dans tout ça.

    Tatayo.

Discussions similaires

  1. Mise à Jour d'une table via un Update (select)
    Par Arola78 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 23/09/2006, 14h59
  2. [C#/ADO.NET] Comment Updater une table via Datagrid ?
    Par Pierre_45 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 06/07/2006, 11h40
  3. Update d'une table a partir d'une autre table
    Par Yannis06 dans le forum Oracle
    Réponses: 6
    Dernier message: 11/08/2005, 11h32
  4. Update d'une table
    Par EssaiEncore dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/02/2005, 10h00
  5. UPDATE d'une table avec test d'un champ d'une autre table
    Par delphim dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2004, 12h30

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