我在SQL中有两个表:Event和Swimstyle Event表的值为SwimstyleId,引用Swimstyle.id Swimstyle表有3个值:distance,relaycount和strokeid
通常情况下,Swimstyle表中会有30到50行之间的某些行,它会保存所有可能的值(这些值是游泳距离,如50(距离),1(重新计算),FREE(描边))。 但是,由于编程错误,现有值的查找不起作用,新结果的导入器为每个添加的事件创建了一个新的swimstyle条目... 我的Swimstyle表现在包含近20万行,其中当然是性能明智而不是最好的想法;)
要解决此问题,我想浏览所有事件,获取附加的泳道值,查找Swimstyle中具有相同距离,relaycount和strokeid值的第一个现有行,并使用该值更新Event.SwimstyleId。 / p>
完成所有操作后,我可以删除所有孤立的Swimstyle行,只留下30-50行的表格。
我一直在努力做一个查询来做到这一点,但没有到达任何地方。有人指出我正确的方向吗?
答案 0 :(得分: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);