查找最低值并用该值更新其他表



我在SQL中有2个表:Event和Swimstyle事件表有一个值SwimstyleId,它引用了Swimstyle.idSwimstyle表有3个值:距离,接力计数和strokeid

通常在表Swimstyle中会有30到50行,其中包含所有可能的值(这些是游泳距离,如50 (distance), 1 (relaycount), FREE (strokeid)))。然而,由于编程错误,查找现有值不起作用,新结果的导入器为每个添加的事件创建了一个新的泳姿条目……我的Swimstyle表现在包含近200k行,这当然是性能明智的不是最好的主意;)

为了解决这个问题,我想要通过所有事件,获得附加的swimstyle值,查找swimstyle中具有相同距离,relaycount和strokeid值的第一个现有行,并更新事件。

当这一切都完成后,我可以删除所有孤立的Swimstyle行,只留下30-50行表。

我一直试图做一个这样的查询,但没有得到任何地方。谁能给我指指方向?

如果我没看错的话,这两个语句应该可以解决这个问题。注:我还没能在任何地方尝试这个,我对表结构做了一些假设。

UPDATE event e
set swimstyle_id = (SELECT MIN(s_min.id)
                    FROM   swimstyle s_min,swimstyle s_cur
                    WHERE  s_min.distance   = s_cur.distance
                    AND    s_min.relaycount = s_cur.relaycount
                    AND    s_min.strokeid   = s_cur.strokeid
                    AND    s_cur.id         = e.swimstyle_id);
DELETE FROM swimstyle s
WHERE NOT EXISTS (SELECT 1 
                  FROM   event e
                  WHERE  e.swimstyle_id = s.id);

最新更新