0

私は次の表を持っています

id  val     match_id    oddname_id    dif
1   1.75    401             1         0.25 //THIS ONE MUST BE DELETED. EXPLAINED BELOW
2   3.30    401             2         -0.20
3   5.00    401             3         0.00
4   1.13    401             4         0.00

Id は単なるインデックスです。主キーは、 oddname_idmatch_id の組み合わせです。

私はxmlからデータを解析します。ここで私がしなければならないことは次のとおりです。

  1. 主キーが存在しない場合は挿入します。

    match_id=402 と oddname_id=1 がある場合、挿入する必要があります。これは、match_id 402 が存在しないためです。

  2. 重複キーの更新について。

    match_id=401 で、oddname_id=1 の場合、val と dif のみを更新する必要があります。(dif は val と新しい値の差に等しい。

  3. KEY DOESN'T EXISTS の場合、すべてのデータを削除したい

これが私のクエリです。最初の 2 つのステートメントは正常に機能しますが、3 つ目のステートメントを機能させる方法については意見がありません。

INSERT INTO odds 
    (match_id,oddname_id,val) 
VALUES 
    ('401','2','3.3'),
    ('401','3','5.0'),
    ('401','4','1.25'),
ON DUPLICATE KEY 
UPDATE 
    dif = val-VALUES(val), 
    val = VALUES(val);

このクエリに次のようなものを追加したい:

IF KEY DOESN'T EXISTS DELETE.

この例では、最初の行を削除する必要があります。

 id val     match_id    oddname_id    dif
 1  1.75    401             1         0.25

挿入中に VALUES に 401 (match_id) と 1 (oddname_id) がないためです。

4

1 に答える 1

0
  1. XML ファイルから追加の (一時) テーブルにデータをインポートします。MySQL 5.5 では LOAD XML コマンドを使用できます。
  2. oddstemp に存在しないテーブルからレコードを削除します。テーブル - JOIN コマンドで DELETE を使用します。
  3. oddstemp からのデータでテーブルを挿入/更新します。テーブル - INSERT...ON DUPLICATE KEY UPDATE コマンドを使用します。
于 2011-10-13T08:58:00.920 に答える