带条件的SQL查询如果(更新或插入)?

时间:2012-06-10 06:01:21

标签: mysql sql database

我有4个单元格(ABCD),如果它们是空的,我需要更新它们,但不是全部都是相同的例如:如果为空A而不是更新A - >如果A已满,则设置为10,而不是检查B单元格,如果它是空的,则放在那里10,也可以将其分配给其他最后两个单元格C,{{1如果1个单元格被更新,则不需要更新其他3个单元格,如果所有单元格都已满,则不需要INSERT INTO Dtable)VALUES(10)。

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

A
希望得到帮助。

更新 看来它在程序中真的是一个逻辑上的麻烦,首先我需要SELECT所有单元格,这个查询将是这样的:

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

然后再进行下一步。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您可以执行以下操作:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

INSERT INTO <table> 
 VALUES (1, 2, 3 ,4) 
 ON DUPLICATE KEY
UPDATE a=1,b=2,c=3,d=4

但我认为这不符合你的目的。您需要使用PHP或服务器端语言编写逻辑。