Problème avec une table USER_DIM dans une base de données qui contient des références à d'autres tables de cette base de données, telles que USER_ACTIVITY_FACT via USER_ID.Mise à jour SQL - fusion de données
Un problème se pose lorsque la conception d'origine de la table n'utilise pas un identificateur unique approprié qui provient en fait de l'EXTERNAL_ID d'une autre base de données.
Je peux comprendre comment sélectionner les lignes supplémentaires ou de les supprimer, mais je veux mettre à jour les lignes dans les autres tables pour pointer vers le USER_ID d'origine, puis supprimer les lignes supplémentaires dans la table USER_DIM
SELECT ACTIVITY_FACT.USER_ID
FROM USER_ACTIVITY_FACT
WHERE USER_ACTIVITY_FACT.USER_ID IN (
select USER_ID
FROM USER_DIM
WHERE EXTERNAL_ID IN (SELECT ud2.EXTERNAL_ID
FROM USER_DIM as ud2
where USER_ID > ud2.USER_ID));
les mettre à jour pour être le plus petit USER_ID
Ensuite, exécutez l'instruction delete sur USER_DIM; Après quoi ALTER la table pour avoir un index unique sur la colonne EXTERNAL_ID.
Cette requête peut être mise à jour par ligne plutôt que de mettre à jour plusieurs lignes à la fois pour l'utilisateur USER_ID incriminé.
Merci d'avance pour votre aide!
MISE À JOUR Pour clarifier l'objectif:
USER_ACTIVITY_FACT
-------------
USER_ID
2
3
4
5
6
USER_DIM
--------------
USER_ID EXTERNAL_ID
2 23
3 23
4 24
5 24
6 26
..result devrait ressembler à
USER_ACTIVITY_FACT
-------------
USER_ID
2
2
4
4
6
USER_DIM
--------------
USER_ID EXTERNAL_ID
2 23
4 24
6 26
espérons que cette aide