我在MYSQL数据库TABLE1中有一个表,列COLA,COLB,COLC和(COLA,COLB)是复合主键。像这样的东西
-----------------------
| COLA | COLB | COLC |
-----------------------
| A | B | C |
-----------------------
| A | Q | D |
-----------------------
| A | E | J |
-----------------------
| B | W | P |
-----------------------
还有后台脚本将数据传递给java程序,该程序应在以下条件下更新表:
- 如果新值有 PRIMARY KEY 的新对,则 INSERT 新行进入表格。
- 如果新值包含 PRIMARY KEYs 的任何公共对,则更新表。
- 删除所有其他行 COLA值匹配的新值。
醇>
如果新的vaues ('A','B','L'),('A','Y','D'),< strong>('A','Q','Z')那么它应该:
所以表应该看起来像
-----------------------
| 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'));
但它不起作用。因为它也删除了最后一行。 所以
感谢先生:)
答案 0 :(得分: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'));
答案 1 :(得分:0)
我也找不到该问题的一个查询解决方案,但对于第二个查询,可以使用以下优化版本:
DELETE FROM TABLE1 WHERE COLA='A' AND COLB NOT IN ('B','Y','Q');
或
DELETE FROM TABLE1 WHERE COLA='A' AND COLC NOT IN ('L','Z','D');
可以使用上述任何一种方法,并且可以比您提供的方法进行扩展。