0

我在 SQL 中有 2 个表:Event 和 Swimstyle Event 表有一个值 SwimstyleId,它指的是 Swimstyle.id Swimstyle 表有 3 个值:距离、relaycount 和 strokeid

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

为了解决这个问题,我想遍历所有事件,获取附加的泳式值,查找 Swimstyle 中具有相同距离、relaycount 和 strokeid 值的第一个现有行,并使用该值更新 Event.SwimstyleId。

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

我一直在尝试进行这样的查询,但没有得到任何结果。有人指出我正确的方向吗?

4

1 回答 1

0

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

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);
于 2013-03-18T15:08:56.743 回答