0

私はテーブルaccountsとを持っていactionます。accountsに格納されている命令に従って変更する必要がありますaction。各行には、アカウントID、アクション(i =挿入、u =更新、d =削除、x =無効な操作)、およびアカウントを更新するための金額が含まれています
action

  • 挿入時に、アカウントがすでに存在する場合は、代わりに更新を行う必要があります
  • 更新時に、アカウントが存在しない場合は、挿入によって作成されます
  • 削除時に、行が存在しない場合、アクションは実行されません

入力

アカウント:

+---id----value--+
|   1  |   1000  |
|   2  |   2000  |
|   3  |   1500  |
|   4  |   6500  |
|   5  |    500  |
+----------------+

アクション:

+---account_id---o---new_value---status---+
|       3      | u |     599   |          |
|       6      | i |    2099   |          |
|       5      | d |           |          |
|       7      | u |    1599   |          |
|       1      | i |     399   |          |
|       9      | d |           |          |
|      10      | x |           |          |
+-----------------------------------------+

出力

アカウント:

+---id----value--+
|   1  |    399  |
|   2  |    800  |
|   3  |    599  |
|   4  |   1400  |
|   6  |  20099  |
|   7  |   1599  |
+----------------+

アクション:

+---account_id---o---new_value-------------------status----------------+ 
|       3      | u |     599   | Update: Success                       |
|       6      | i |   20099   | Update: Success                       |
|       5      | d |           | Delete: Success                       |
|       7      | u |    1599   | Update: ID not founds. Value inserted |
|       1      | i |     399   | Insert: Acc exists. Updated instead   |
|       9      | d |           | Delete: ID not found                  |
|      10      | x |           | Invalid operation: No action taken    |
+----------------------------------------------------------------------+

私はJavaとJDBCの経験がありますが、残念ながら、ここから始める方法がわかりません。
追加のテーブルが必要ですか?トリガーを使用する必要がありますか?

4

1 に答える 1

0

私はアップサートのための2つのテクニックを見てきました。最初の手法では、トランザクション内で、最初に行が存在するかどうかをテストし、その結果を使用して、挿入を実行するか更新を実行するかを決定します。2番目の手法では、更新を実行して、更新されたレコードの数を確認します(JDBCがこれを提供します)。ゼロの場合は挿入を行い、1の場合は完了です。

于 2012-05-13T03:59:32.067 に答える