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 :

Mise à jour d'une table jointure


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut Mise à jour d'une table jointure
    Bonjour à tous,
    J'ai besoin d'aide pour une de mes requêtes

    J'avais une base avec une table user (liste des utilisateurs), une table Projet et une table "jointure" car c'est une relation N,N

    Je suis contraint de recréer une nouvelle base avec la même structure de table
    et d'importer mes utilisateurs via Excel (script maison)
    Tout fonctionne très bien. Seul soucis (Hé oui sinon j'aurai pas créé ce sujet), mes utilisateurs n'ont plus le même ID et donc ma relation avec la table Projet est faussée (relation via table "jointure")

    Pour le moment, j'ai réussi à lister les id des 2 tables users avec l'id de la table jointure

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT user_base1.Name, user_base1.Id as "user_base1_ID", user_base2.Name, user_base2.Id as "user_base2_ID", link.User_Id as "link_user_ID"
    FROM [BASE1].[dbo].[User] AS user_base1
    INNER JOIN [BASE2].[dbo].[User] AS user_base2
    ON user_base1.[Name] = user_base2.[Name]
    INNER JOIN [BASE1].[dbo].[Link_User_WS] AS link 
    ON link.User_Id = user_base2.Id

    donc théoriquement il suffirai de remplacer la valeur de link.User_Id (correspondant à user_base2.Id) par celle de user_base1.Id
    hélas je n'arrive pas à construire cette requête correctement

    Ma tentative :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE [BASE1].[dbo].[Link_User_WS] 
    SET [BASE1].[dbo].[Link_User_WS].[User_Id] = user_base1.[Id]
    FROM [BASE1].[dbo].[User] AS user_base1 INNER JOIN [BASE2].[dbo].[User] AS user_base2
    ON user_base1.[Name] = user_base2.[Name]
    WHERE [BASE1].[dbo].[Link_User_WS].[User_Id]=user_base2.[Id]

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Votre requête semble correcte. que se passe-t-il ? avez vous une erreur, elle ne mets pas a jour ce que vous voulez, ou mal ?

    Notez par ailleurs que vous auriez pu "forcer" l'insertion des identifiants en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SET IDENTITY_INSERT LaTable ON
    INSERT...
    SET IDENTITY_INSERT LaTable OFF

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Bonjour
    La requête s'effectue mais je n'obtiens pas le résultat attendu
    par exemple dans la table link j'avais 3 lignes avec l'id_user 5
    Son nouvelle ID est le 4
    Après l'update je me retrouve avec 7 lignes avec l'id 4

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    que vous renvoi cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT user_base1.Name
    FROM [BASE1].[dbo].[User] AS user_base1
    GROUP BY user_base1.Name
    HAVING COUNT(*) > 1

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Non la colonne name est bien unique

  6. #6
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Que donnes ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    UPDATE LUW
    SET LUW.[User_Id] = user_base1.[Id]
    FROM [BASE1].[dbo].[User] AS user_base1 
        INNER JOIN [BASE2].[dbo].[User] AS user_base2
            ON user_base1.[Name] = user_base2.[Name]
        INNER JOIN [BASE1].[dbo].[Link_User_WS] LUW
            ON LUW.User_Id=[User_Id]=user_base2.[Id]
    pour vérifier ce que celà va donner ne faite pas l'update:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT LUW.[User_Id] ORIGINAL_ID,
    user_base1.[Id] COPY_ID
    FROM [BASE1].[dbo].[User] AS user_base1 
        INNER JOIN [BASE2].[dbo].[User] AS user_base2
            ON user_base1.[Name] = user_base2.[Name]
        INNER JOIN [BASE1].[dbo].[Link_User_WS] LUW
            ON LUW.User_Id=[User_Id]=user_base2.[Id]

Discussions similaires

  1. Mise à jour d'une table avec jointure
    Par mouna1 dans le forum Débutez
    Réponses: 4
    Dernier message: 16/10/2012, 17h46
  2. Hibernate/JPA: ManyToMany, mise à jour dans une table de jointure.
    Par PhilippeGibault dans le forum Hibernate
    Réponses: 1
    Dernier message: 19/04/2011, 14h40
  3. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  4. Réponses: 5
    Dernier message: 06/01/2005, 12h07
  5. mise à jour d'une table d'interbase sous delphi
    Par kouraichi35 dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/10/2004, 13h09

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