加入子表上多行的更新

时间:2012-04-25 21:38:31

标签: mysql multiple-tables

parent_table:
ID  | FIELD1 | FIELD2
____|________|________
1   |........|......
2   |........|.....
3   |.............. 

child_table:
ID | FIELD3
___|________
1  |   18
1  |   7
2  |   ..
1  |   ..
3  |   ..
2  |   ..

假设我想更新这些表格。 这就是我需要实现的目标:

 UPDATE parent_table SET 
   FIELD1 = 'XXX', 
   FIELD2 = 'YYY' 
 WHERE ID = 2;

 DELETE FROM child_table 
 WHERE ID = 2;

 INSERT INTO child_table (ID, FIELD3)
   VALUES (2, 50),
   VALUES (2, 17),
   VALUES (2, 9);

请注意,每个ID的子表中的条目数可能会在更新期间发生变化。

是否可以在一个查询中获得相同的结果? 我无法使用交易。

也许前两个查询更容易合并。 我试图加入子表并在UPDATE期间设置空值,但我不知道如何处理多行.. 是否可以像嵌套SELECT一样嵌套UPDATE?

1 个答案:

答案 0 :(得分:1)

您可以在一个命令中更新多个表:

UPDATE parent_table p LEFT JOIN child_table c On p.id = c.id
 SET 
   p.FIELD1 = 'XXX', 
   p.FIELD2 = 'YYY',
   c.FIELD3 = ''
 WHERE p.ID = 2;

但是,我不认为您可以在同一命令中执行更新和删除 - 但我必须承认我不确定。

您可以阅读有关多个表更新here

的详情

另一种(和首选)方法是在parent_table上创建一个触发器,它将在更新时从child_table中删除相关记录。

相关问题