mysql - 条件为 If (Update OR Insert) 的 SQL 查询?

标签 mysql sql database

我有 4 个单元格(ABCD),我需要更新它们如果它们为空,但不是同时为空,例如:如果 A 为空则更新 A -> 设置为 10,如果 A 已满,比检查 B 单元格,如果它是空的,放在那里 10,也可能分配给其他最后两个单元格 C,D,如果更新了 1 个单元格,则无需更新其他 3 个单元格,如果所有单元格都已满,则 INSERT INTO table (A) VALUES(10).

我做了一个,但它是错误的查询,因为它正在更新所有单元格:

mysql> UPDATE `mytable` SET `A`=10,`B`=10,`C`=10,`D`=10 WHERE `A` IS NULL OR `B` IS NULL OR `C` IS NULL OR `D` IS NULL LIMIT 1;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 0

希望得到帮助。

已更新 看来这真的是程序中的逻辑问题,首先我需要选择所有单元格,这个查询将是这样的:

mysql> SELECT `A`,`B`,`C`,`D` FROM `mytable` WHERE `A` IS NULL OR `B` IS NULL OR `C` IS NULL OR `D` IS NULL LIMIT 1;

然后进行下一步。

最佳答案

您的数据结构似乎特别奇怪:也许替代结构会以更好的方式实现您想要的结果?但是,如果没有有关您尝试建模的问题的更多信息,您可以使用以下内容执行您提到的更新:

LOCK TABLES mytable WRITE;

INSERT INTO `table` (A) SELECT 10 FROM mytable WHERE
  A IS NOT NULL AND B IS NOT NULL AND C IS NOT NULL AND D IS NOT NULL;

UPDATE mytable SET
  D = IF(A IS NOT NULL AND B IS NOT NULL AND C IS NOT NULL AND D IS NULL, 10, D),
  C = IF(A IS NOT NULL AND B IS NOT NULL AND C IS NULL, 10, C),
  B = IF(A IS NOT NULL AND B IS NULL, 10, B),
  A = IF(A IS NULL, 10, A);

UNLOCK TABLES;

关于mysql - 条件为 If (Update OR Insert) 的 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10966681/

相关文章:

mysql - 根据 2 个电子邮件地址查找列的重复条目

mysql - SQL "like"搜索类似 "öüä"的字符?

java - 限制 jConnector 中的 MySQL 批处理大小

php - 获取url参数并插入数据库

ios - 无法保存到核心数据

sql - ORA-00932 : inconsistent datatypes: expected NUMBER got LONG

MySQL MIN 查询不适用于计算距离

php - 如何在 yii2 搜索模型中编写 mysql 查询

c# - 为什么我尝试插入时出现 "Must declare the scalar variable "@rollnum""错误?

mysql - 简单订票系统DB设计的几点建议