2016-03-13 88 views
1
UPDATE `Order` 
SET Order_Cost ='17.88' 
WHERE Order_Cost ='16.89' 
UNION 
UPDATE `BagelCard` 
SET BagelPoints = '50',Discount = True 
WHERE BagelPoints ='45'; 

这是我在两个不同表格中增加值的sql代码。这样对吗 ?或者我用什么sql命令来更新两个不同表中的值。在一条SQL语句中更新两个不同的表格

回答

4

UNION用于SELECT查询。如果你想运行两个更新,你可以使用两个单独的查询:

UPDATE `Order` 
    SET Order_Cost = '17.88' 
    WHERE Order_Cost = '16.89'; 

UPDATE `BagelCard` 
    SET BagelPoints = '50', 
     Discount = True 
    WHERE BagelPoints = '45'; 

如果你的值是数字比我建议删除单引号。同样十进制数字(如价格)应存储为小数点/数字而非浮点数。

我应该注意到MySQL 确实允许你在一个语句中更新两个表。您可以使用JOIN。在这种情况下,它并没有什么意义,因为这些表似乎并不相关:

UPDATE `Order` o CROSS JOIN 
     `BagelCard` bc 
    SET o.Order_Cost = '17.88', 
     bc.BagelPoints = '50', 
     bc.Discount = True 
    WHERE o.Order_Cost = '16.89' AND bc.BagelPoints = '45'; 
+0

我不知道MySQL允许使用CROSS JOIN更新两个表,这很好知道。然而,在我看来,这个单一的查询可能很难阅读,容易被误解。我更愿意分开查询以获得更好的可读性。 –

+0

@AlbertoSolano。 。 。我更喜欢使用两个单独的查询(第一个解决方案),特别是在这种情况下。然而,在重新阅读这个问题时,OP似乎要求一个命令来更新多个表。 –

+0

是的,OP当然要求一个命令。我没有任何反对你的答案(顺便说一句,我加了一个赞成票)。我只是对单个命令查询的可读性发表评论。 :-) –