UPDATE/INSERT INTO/DELETE 来自 table 在 MYSQL

UPDATE/INSERT INTO/DELETE FROM table in MYSQL

我在 MYSQL 数据库 TABLE1 中有一个 table,列 COLA、COLB、COLC 和 (COLA,COLB) 是复合主键。像这样

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

还有一个后台脚本将数据传递给 java 程序,该程序应在以下条件下更新 table :

  1. If new values have any new pair for PRIMARY KEYs then INSERT new row into the table.
  2. If new values have any common pair for PRIMARY KEYs then UPDATE the table.
  3. DELETE all other rows Where COLA value matches with new values.

如果新值是 ('A','B','L'),('A' ,'Y','D'),('A','Q','Z') 那么它应该:

  1. 更新第一第二行。
  2. 插入一个新行('A'、'Y'、'D')。
  3. 仅删除第 第 3 行。

所以 table 应该看起来像

-----------------------
|  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. 能否合并为一个查询?

提前致谢:)

我得到了第一个问题的答案。查询应该是

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'));

我也找不到针对此问题的查询解决方案,但对于第二个查询,稍微优化的版本可以是:

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');

以上任何一种都可以使用,并且比您提供的更具可扩展性。