如何在一个语句中更新两个表?

时间:2009-12-09 04:12:25

标签: mysql

UPDATE table1, tmpList
  SET table1.ts = tmpList.ts_value
WHERE table1.id = tmpList.id

UPDATE table2, tmpList
  SET table2.ts = tmpList.ts_value
WHERE table2.id = tmpList.id

我正在使用MySQL

4 个答案:

答案 0 :(得分:2)

假设每个id都出现在两个表中(理想情况下只出现一次):

update tmpList inner join table1 using (id) inner join table2 using (id)
    set table1.ts = tmpList.ts_value, table2.ts=tmpList.ts_value;

更新:简单地使用左连接而不是内连接使得即使对于仅在一个表中的id也可以工作 - 似乎只是跳过了不适用的set子句;我显然应该早点尝试过。

答案 1 :(得分:1)

答案 2 :(得分:1)

为什么需要一个声明?你担心一个完成而另一个失败,留下一半更新的混乱?

Id就是这种情况,交易就是您所需要的。例如

begin work;

UPDATE table1, tmpList
  SET table1.ts = tmpList.ts_value
WHERE table1.id = tmpList.id;

UPDATE table2, tmpList
  SET table2.ts = tmpList.ts_value
WHERE table2.id = tmpList.id;

commit work;

您应该能够在一个命令中运行上述所有操作,但如果没有,则可以单独运行它们。除非提交完成,否则不会永久保存数据,只有在begin ... commit之间的所有前一行都成功时才会发生。

答案 3 :(得分:-2)

不,如果您使用简单查询,这是不可能的。我不熟悉我的sql,但在oracle中,一次不能更新两个表。