Je suis un débutant dans SQL Server et j'ai beaucoup de difficultés à résoudre la tâche suivante: J'ai 2 tables:colonne mise à jour dans SQL Server
User_Info
User_UID UNIQUEIDENTIFIER ROWGUIDCOL NULL DEFAULT(newid())
FirstName VARCHAR(50)
LastName VARCHAR(50)
Email VARCHAR(50)
Session
User_UID CHAR(40)
Session_ID PK INT
En USER_INFO j'ai différents User_UID correspondant le même utilisateur, c'est-à-dire un utilisateur ayant le même Prénom, Nom et Email. Je souhaite nettoyer la table User_Info en supprimant l'utilisateur redondant (ayant le même triplet: FirstName, LastName et Email (non nul et non vide)) et mettre à jour la colonne User_UID dans la table Session vers le user_uid correspondant restant dans le Table User_Info et pointant vers le même utilisateur.
Ce sont mes tableaux:
CREATE TABLE user_info (
User_UID uniqueidentifier ROWGUIDCOL NULL DEFAULT (newid()),
FirstName varchar(50),
LastName varchar(50),
Email varchar(50)
)
INSERT user_info VALUES(newid(), 'Marc', 'Jalloul', '[email protected]')
INSERT user_info VALUES(newid(), 'Marc', 'Jalloul', '[email protected]')
INSERT user_info VALUES(newid(), 'Estelle', 'Jalloul', '[email protected]')
INSERT user_info VALUES(newid(), 'Estelle', 'Jalloul', '[email protected]')
INSERT user_info VALUES(newid(), 'Tony', 'Jalloul', '[email protected]')
INSERT user_info VALUES(newid(), 'Tony', 'Jalloul', '[email protected]')
INSERT user_info VALUES(newid(), '', 'Mirebeau', '[email protected]')
INSERT user_info VALUES(newid(), '', 'Mirebeau', '[email protected]')
INSERT user_info VALUES(newid(), NULL, 'Mirebeau', '[email protected]')
INSERT user_info VALUES(newid(), NULL, 'Mirebeau', '[email protected]')
CREATE TABLE session (
session_id INT IDENTITY(1, 1),
User_UID char(40)
)
INSERT Session
SELECT User_UID FROM user_info
Comme résultat escompté 2 lignes doivent être supprimées de User_info (lignes 2 et 6 (ou 1 et 5 en fonction de la commande)) et le User_UID de la ligne 2 et 6 de la table de session doit être mis à jour à User_UID des lignes 1 et 5 respectivement.
Ceci est mon code pour supprimer l'utilisateur redondant de USER_INFO:
DELETE UI
FROM (
SELECT *
,row_number() OVER (
PARTITION BY FirstName
,LastName
,Email ORDER BY User_UID
) AS RowNum
FROM user_info
WHERE FirstName IS NOT NULL
AND FirstName <> ''
AND LastName IS NOT NULL
AND LastName <> ''
AND Email IS NOT NULL
AND Email <> ''
) r
INNER JOIN user_Info UI
ON r.User_UID = UI.User_UID
WHERE r.RowNum > 1
Mais je ne trouve pas encore une façon de mettre à jour le terrain User_UID de table de session sans utiliser le curseur
Si quelqu'un peut aider moi et me donner le code de cette tâche si possible
Merci
Question - lorsque vous supprimez les utilisateurs en double, pourquoi avez-vous besoin de conserver les enregistrements dans la table 'Session'? –
Je veux nettoyer uniquement la table User_Info et conserver tous les ID de session sans en supprimer aucun – user3569267