数据库中的 USER_DIM 表出现问题,该表通过 USER_ID 引用了该数据库中的其他表,例如 USER_ACTIVITY_FACT。
当表的原始设计没有使用实际上来自不同数据库的 EXTERNAL_ID 的正确唯一标识符时,就会出现问题。
我可以弄清楚如何选择额外的行或删除它们,但我想更新其他表中的行以指向原始 USER_ID,然后删除 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));
将这些更新为最小的 USER_ID
然后对USER_DIM执行delete语句;
DELETE
FROM USER_DIM
WHERE EXTERNAL_ID IN (SELECT ud2.EXTERNAL_ID
FROM USER_DIM as ud2
where USER_ID > ud2.USER_ID);
之后 ALTER 表在 EXTERNAL_ID 列上具有唯一索引。
此查询可能会按行更新,而不是更喜欢一次更新多行违规的额外 USER_ID。
在此先感谢您的帮助!
更新 为了澄清目标:
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
..结果应该看起来像
USER_ACTIVITY_FACT
-------------
USER_ID
2
2
4
4
6
USER_DIM
--------------
USER_ID EXTERNAL_ID
2 23
4 24
6 26
希望这可以帮助