在MYSQL中对表进行UPDATE / INSERT INTO / DELETE FROM

mysql database sql-update sql-insert sql-delete

295 观看

1回复

104 作者的声誉

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

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

还有一个后台脚本,该脚本将数据传递到Java程序,该程序应在以下情况下更新表:

  1. 如果新值对PRIMARY KEY有任何新对,则在表中插入新行。
  2. 如果新值具有用于PRIMARY KEY的任何公共对,则更新表。
  3. 删除所有其他行,其中COLA值与新值匹配

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

  1. 更新第一第二行。
  2. 插入新行(“ A”,“ Y”,“ D”)。
  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. 可以合并为一个查询吗?

提前致谢 :)

作者: Sushovan 的来源 发布者: 2017 年 9 月 15 日

回应 1


0

104 作者的声誉

决定

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

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'));
作者: Sushovan 发布者: 2017 年 9 月 15 日
32x32