以下是场景:
当顾客第一次下订单时,桌子是空的;看起来像这个
+----+------+---------+
| no | item | results |
+----+------+---------+
下订单后,表格看起来像这个
+----+--------+---------+
| no | item | results |
+----+--------+---------+
| 1 | Test 1 | null |
| 2 | Test 2 | null |
| 3 | Test 3 | null |
+----+--------+---------+
这是容易的部分。我可以在INSERT
查询中使用逗号分隔的VALUE
子句。
然后订单被发送到实验室,当实验室人员完成工作时,表格变成这样:
+----+--------+---------+
| no | item | results |
+----+--------+---------+
| 1 | Test 1 | Res 1 |
| 2 | Test 2 | Res 2 |
| 3 | Test 3 | Res 3 |
+----+--------+---------+
这就是你的答案。我需要用结果更新测试。然而,我真的不想做几十个UPDATE--SET--WHERE
语句,每个测试项目一个。还有别的办法吗?
根据存储引擎的限制等,您可以在重复的上使用插入
http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html
这允许您使用插入查询,如果行已经存在,则该查询将更新值。
类似的东西
insert into table (no, item, result) values(1, "A", "B") on duplicate key update item=values(item), result=values(result)
还有REPLACE INTO。
http://dev.mysql.com/doc/refman/5.0/en/replace.html
其中一个应该适合你的需要。
您可以创建另一个表并在其中创建INSERT
值:
+----+---------+
| no | results |
+----+---------+
| 1 | Res 1 |
| 2 | Res 2 |
| 3 | Res 3 |
+----+---------+
然后只有一个更新:
UPDATE
t1
SET
results = t2.results
INNER JOIN
t2
ON t1.no = t2.no
INSERT INTO ... ON DUPLICATE KEY UPDATE
表必须具有唯一键。它比单行更新更快。
不幸的是(据我所知(,您不能在一个SQL查询中执行多个唯一的更新。
您可以在一个查询中更新多个行,但每个行都会得到相同的更新。
每个更新都需要作为自己的声明来完成。
最好的办法是编写一个更新单行的循环,并让它为需要完成的每个更新运行。