如何根据 table 的旧条目更新代理键

How can I update a surrogate key based on an older entry of a table

我有一个叫 player_stage 的 table。 我正在尝试准备我的数据,以便将其放入数据仓库。

我目前有一个不可靠的解决方法,涉及重复视图并从重复项中挑选值。

我需要创建一个查询,为重复项提供相同的代理键 (sk)。

知道我该怎么做吗?我一直卡在t 他的 3 天。

如果您使用的是 MySQL 8+,那么 DENSE_RANK 可以在这里工作:

SELECT
    PLAYER_ID,
    PLAYER_NAME,
    DB_SOURCE,
    DENSE_RANK() OVER (ORDER BY PLAYER_NAME) SK
FROM yourTable;

上面对 DENSE_RANK 的调用会将相同的 SK 值分配给属于同一玩家名称的所有记录。

如果你使用的是MySQL早于8+的版本,那么我们可以用用户变量模拟密集排名,例如

SELECT t1.PLAYER_ID, t1.PLAYER_NAME, t1.DB_SOURCE, t2.rn AS SK
FROM yourTable t1
INNER JOIN
(
    SELECT PLAYER_NAME, @rn := @rn + 1 AS rn
    FROM (SELECT DISTINCT PLAYER_NAME FROM yourTable) t, (SELECT @rn := 0) r
    ORDER BY PLAYER_NAME
) t2
    ON t1.PLAYER_NAME = t2.PLAYER_NAME
ORDER BY
    t1.PLAYER_ID;

演示