0

SQL に 2 つのテーブルがあります: Event と Swimstyle Event テーブルには、Swimstyle.id を参照する値 SwimstyleId があります。Swimstyle テーブルには、distance、relaycount、および strokeid の 3 つの値があります。

通常、テーブル Swimstyle には 30 ~ 50 行があり、すべての可能な値が保持されます (これらは、50 (距離)、1 (リレーカウント)、FREE (ストローク ID) などの水泳距離です)。ただし、プログラミングのミスにより、既存の値のルックアップが機能せず、新しい結果のインポーターが、追加された各イベントに対して新しいスイムスタイル エントリを作成しました...私のスイムスタイル テーブルは現在、ほぼ 20 万行で構成されています。最高のアイデア;)

これを修正するには、すべてのイベントを調べて、添付されているスイムスタイルの値を取得し、同じ距離、リレーカウント、およびストローク ID の値を持つスイムスタイルの最初の既存の行を検索し、その値で Event.SwimstyleId を更新します。

これがすべて完了したら、孤立したすべての Swimstyle 行を削除して、テーブルに 30 ~ 50 行だけを残すことができます。

これを行うクエリを作成しようとしましたが、どこにも行きません。誰でも私を正しい方向に向けてくれますか?

4

1 に答える 1

0

私が正しく読んでいれば、これらの2つのステートメントで問題が解決するはずです。注:私はこれをどこでも試すことができなかったので、テーブル構造についていくつかの仮定を立てました。

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 に答える