mysql - 加入子表上多行的更新

标签 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 的子表中的条目数在更新期间可能会有所不同。

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

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

最佳答案

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

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 中删除相关记录。

关于mysql - 加入子表上多行的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10324194/

相关文章:

r - 与 data.tables 的多个连接/合并

php - 从mysql中的多个表中获取结果

mysql 从三个表中选择一个

php - 在不使用表单/字段的情况下将值从 View 传递到 Controller

mysql - 如何删除具有外键的记录 - MySQL Java

php - 返回多个结果 mysql 和 php

mysql - 按mysql中的行数过滤结果

sql-server - 使用全文在多个表中搜索

mysql - 如果目标位于一个表中而事件位于另一个表中,如何显示实现不同目标的进度

mysql - 我应该如何解析MySQL中的--secure-file-priv?