Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 子表上多行的联接更新_Mysql_Multiple Tables - Fatal编程技术网

Mysql 子表上多行的联接更新

Mysql 子表上多行的联接更新,mysql,multiple-tables,Mysql,Multiple Tables,假设我想更新这些表。 这就是我需要实现的目标: parent_table: ID | FIELD1 | FIELD2 ____|________|________ 1 |........|...... 2 |........|..... 3 |.............. child_table: ID | FIELD3 ___|________ 1 | 18 1 | 7 2 | .. 1 | .. 3 | .. 2 | .. 请注意,在更

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

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

child_table:
ID | FIELD3
___|________
1  |   18
1  |   7
2  |   ..
1  |   ..
3  |   ..
2  |   ..
请注意,在更新过程中,每个ID的子表中的条目数可能会有所不同

是否可以在一个查询中获得相同的结果? 我不能使用事务处理

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

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

 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);
然而,我不认为您可以在同一个命令中执行更新和删除-但我必须承认我不确定

您可以阅读有关多个表更新的更多信息


另一种(也是首选的)方法是在父表上创建触发器,该触发器将在更新时从子表中删除相关记录。

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

 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);
然而,我不认为您可以在同一个命令中执行更新和删除-但我必须承认我不确定

您可以阅读有关多个表更新的更多信息


另一种(也是首选的)方法是在父表上创建触发器,在更新时从子表中删除相关记录。

当然,问题是:如何更新联接表中的多行?即使在there are allowed(idk)中放入一个CASE语句,如何解释表中条目数与我要更新的条目数之间的不匹配?例如这里有两个ID=2的条目,但是如果我想放另一个呢。。也许更新就是做不到。通过添加“另一个”你的意思是:例如更改ID2和ID3?不,我的意思是如果
FIELD3
是一个字符串设置为
“5,40,15”
,我可能需要将其更新为
“3,5,7,8,15,7”
,即
子表中的行数可能会有所不同。我可以执行
插入。。在重复密钥更新时
但是在我的表中没有
唯一
键,在这种情况下,我想我应该创建一个DB过程,接收所有参数并连续运行更新和插入。当然,问题是:如何更新联接表中的多行?即使在there are allowed(idk)中放入一个CASE语句,如何解释表中条目数与我要更新的条目数之间的不匹配?例如这里有两个ID=2的条目,但是如果我想放另一个呢。。也许更新就是做不到。通过添加“另一个”你的意思是:例如更改ID2和ID3?不,我的意思是如果
FIELD3
是一个字符串设置为
“5,40,15”
,我可能需要将其更新为
“3,5,7,8,15,7”
,即
子表中的行数可能会有所不同。我可以执行
插入。。在重复密钥更新时
但是在我的表中没有
唯一
键,在这种情况下,我想我应该创建一个DB过程来接收所有参数并连续运行更新和插入。