1

MySQL初心者はこちら。2つのテーブル(以下に表示)があり、そのうちの1つ(freqs)に、参照列(以下のtype_freq)のデータが一致する列に基づいて値を挿入します。たとえば、「rs9」(freqsから)のタイプは「GG」であり、この「GG」値はtype_freqテーブルの「type2」と一致します。対応する頻度(この場合は「.2」)をに挿入します。 'rs9'の周波数値。

私は無駄にケースステートメントをいじってみました。私はこれがいくつかのケースステートメントで最もよく解決されると考えるのは正しいですか?おそらくもっと良い方法はありますか?フィードバックをいただければ幸いです。ありがとう!


テーブル:


表の頻度

rsid       type      freq
rs9         GG
rs8         CC
rs1         CC  

TABLE type_freq

 rid       type1    type1_frequency    type2   type2_frequency   type3     type3_frequency
 rs9       AA        .7                GG        .2             GC         .1
 rs8       CC        .5                TT        .3             AT         .2
 rs1       AA        .9                CC        .1             .          .

私のコード:

 UPDATE freqs SET req = 
     (
(SELECT type1_Frequency CASE 
    WHEN type.freqs = type1.type_frequencies
            FROM type_frequencies
    END CASE)
(SELECT type2_Frequency CASE
    WHEN type.freqs = type2.type_frequncies
            FROM type_frequencies
    END CASE)
(SELECT type3_Frequency CASE
    WHEN type.freqs = type3.type_frequencies
            FROM type_frequencies
    END CASE)
    )
4

1 に答える 1

1

type_freqまず、テーブルの正規化されたバージョンを作成するクエリを設計しましょう。

SELECT rid, type1 AS type, type1_frequency AS frequency
FROM type_freq
UNION ALL
SELECT rid, type2 AS type, type2_frequency AS frequency
FROM type_freq
UNION ALL
SELECT rid, type3 AS type, type3_frequency AS frequency
FROM type_freq

次に、これを使用してテーブルを更新しましょう。

UPDATE freqs
SET freq =
(
    SELECT frequency
    FROM
    (
        SELECT rid, type1 AS type, type1_frequency AS frequency
        FROM type_freq
        UNION ALL
        SELECT rid, type2 AS type, type2_frequency AS frequency
        FROM type_freq
        UNION ALL
        SELECT rid, type3 AS type, type3_frequency AS frequency
        FROM type_freq
    ) x
    WHERE x.type = freqs.type AND x.rid = freqs.rsid
)

データベーススキーマを制御できる場合は、type_freqテーブルを永続的に正規化することをお勧めします。

于 2013-03-12T18:02:49.620 に答える