2017-09-15 100 views
0

我在MYSQL數據庫TABLE1中有一個表,COLA,COLB,COLC和(COLA,COLB)列是複合主鍵。這樣在MYSQL中UPDATE/INSERT INTO/DELETE FROM表

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

東西也有後臺腳本,將數據傳送給Java程序,應在下列條件下更新表:

  1. 如果新值有主鍵的任何一雙新然後INSERT新行插入表中。
  2. 如果新值有任何公共對主鍵然後UPDATE該表。
  3. DELETE所有其他行其中COLA值匹配與新值。

如果新vaues是( 'A', 'B', 'L')( 'A', 'Y', 'd')( 'A', 'Q', 'Z')那麼就應該:

  1. UPDATE 和第二行。
  2. 插入新行('A','Y','D')。
  3. 刪除只有第3行。

所以表應該看起來像

----------------------- 
| 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

從單個查詢中插入(或插入)和刪除是不可能的。 –

+0

謝謝。有沒有更好的方法? – Sushovan

+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

相關問題