2017-09-15 101 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

相关问题