我有 4 个单元格(A
、B
、C
、D
),我需要更新它们如果它们为空,但不是同时为空,例如:如果 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/