2017-09-15 15 views
0

カラムはCOLA、COLB、COLCおよび(COLA、COLB)は複合主キーです。MYSQLデータベースTABLE1にテーブルがあります。新しい値は、主キーのための新たなペアを持っている場合はMYSQLのUPDATE/INSERT INTO/DELETE FROMテーブル

  1. :この

    ----------------------- 
    | COLA | COLB | COLC | 
    ----------------------- 
    | A | B | C | 
    ----------------------- 
    | A | Q | D | 
    ----------------------- 
    | A | E | J | 
    ----------------------- 
    | B | W | P | 
    ----------------------- 
    

    ような何かはまた、以下の条件でテーブルを更新する必要がありますJavaプログラムにデータを渡す背景スクリプトがあります次にINSERTテーブルに新しい行。

  2. 新しい値にのプライマリキーがある場合は、UPDATEの表を参照してください。
  3. DELETE他のすべての行ここで、COLAの値はと新しい値で一致します。

新しいvauesは( 'A'、 'B'、 'L')( 'A'、 'Y'、 'D')( 'A' である場合、 'Q'、 'Z')それべき:

  1. UPDATE と行。
  2. 新しい行( 'A'、 'Y'、 'D')を挿入します。
  3. 削除のみ第3行。

ので表には、私は2つのクエリを実行していたこれを実現するために

----------------------- 
| COLA | COLB | COLC | 
----------------------- 
| A | B | L | 
----------------------- 
| A | Q | Z | 
----------------------- 
| B | W | P | 
----------------------- 
| A | Y | D | 
----------------------- 

次のようになります。私が望むように取り組んでいる

INSERT INTO TABLE1 VALUES('A','B','L'),('A','Y','D'),('A','Q','Z') ON DUPLICATE KEY UPDATE COLC=VALUES(COLC); 

を。しかし、他の行を削​​除しようとすると、私が試しているものが問題になっています:

DELETE FROM TABLE1 WHERE NOT ((COLA='A' AND COLB='B') OR (COLA='A' AND COLB='Y') OR (COLA='A' AND COLB='Q')); 

しかし、それは動作しません。最後の行も同様に削除されます。 だから

  1. クエリを実装する方法は?
  2. 1つのクエリにまとめることはできますか?事前に

THANKS :)

+1

である必要があります。単一のクエリからの挿入(またはアップアップ)と削除はできません。 –

+0

ありがとうございます。もっと良い方法はありますか? – Sushovan

+2

2つのクエリの現在の方法をそのまま使用できます。親切にもMySQLの方が回答を投稿します。 –

答えて

0

私は最初の質問への答えを得ました。クエリは

DELETE FROM TABLE1 WHERE COLA='A' AND NOT ((COLA='A' AND COLB='B') OR (COLA='A' AND COLB='Y') OR (COLA='A' AND COLB='Q')); 
+0

これは非常にスケーラブルではありません:-( – Strawberry

+0

改善する方法を教えてください。 – Sushovan

関連する問題