Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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_Sql_Sql Update - Fatal编程技术网

多表更新(MySQL)

多表更新(MySQL),mysql,sql,sql-update,Mysql,Sql,Sql Update,我有一个关于多表更新(MySQL)的问题。考虑表T1和T2。t1的PKEY是“tid”,它是t2中的外键。t2中有一个字段“qtyt2”,它依赖于表t1中名为“qtyt1”的字段。考虑下面的SQL语句: UPDATE t2,t1 SET t2.qtyt2=IF(( t2.qtyt2- t1.qtyt1 )<0,0,( t2.qtyt2- t1.qtyt1 ) ), t1.qtyt1 ="Some value.." WHERE t2.tid="some value.."

我有一个关于多表更新(MySQL)的问题。考虑表T1和T2。t1的PKEY是“tid”,它是t2中的外键。t2中有一个字段“qtyt2”,它依赖于表t1中名为“qtyt1”的字段。考虑下面的SQL语句:

UPDATE t2,t1
   SET t2.qtyt2=IF(( t2.qtyt2- t1.qtyt1 )<0,0,( t2.qtyt2- t1.qtyt1 ) ),
       t1.qtyt1 ="Some value.."
 WHERE t2.tid="some value.."
   AND t2.tid=t1.tid
更新t2、t1

设置t2.qtyt2=IF((t2.qtyt2-t1.qtyt1)首先,建议将联接显式化。其次,我认为您的条件有输入错误,应该是
,其中t2.qtyt2='Some value..'

UPDATE t2 JOIN t1 ON (t2.tid=t1.tid)
SET t2.qtyt2= IF(( t2.qtyt2- t1.qtyt1 )<0, 0,( t2.qtyt2- t1.qtyt1 ) ), 
    t1.qtyt1 ="Some value.." 
WHERE t2.qtyt2="Some value..";
更新t2连接t1 ON(t2.tid=t1.tid)

设置t2.qtyt2=IF((t2.qtyt2-t1.qtyt1)我不相信MySQL能保证更新发生的顺序。唯一重要的时间是在使用带有外键约束的InnoDB表时,文档中明确指出,不保证顺序,更新可能会失败。在这种情况下,您应该使用单独的更新e语句,这应该不是问题,因为使用InnoDB可以隔离事务