从表中选择,更新选定的行

时间:2017-10-10 17:05:03

标签: mysql sql

我正在尝试编写一个查询,根据参数从某些行中选择值,然后进行一些计算并返回结果。我还需要更新所选的行。我只能想办法用不同的查询来完成这两个操作,但有没有办法同时做到这两个?

示例查询将是:

SELECT SUM(a.val1*b.val1) 
FROM a, b 
WHERE a.val2 = condition1 AND b.val2 = condition2;

UPDATE a
SET a.val3 = a.val1*b.val1
FROM a INNER JOIN b ON a.val2 = condition1 AND b.val2 = condition2;

有没有办法将它们结合起来?

3 个答案:

答案 0 :(得分:1)

不是:) 在SQL中,它始终是不同的查询。您可以编写一个函数来执行2个操作,但不能编写任何查询。

答案 1 :(得分:1)

没有。 SQL中没有语法允许您在同一查询中检索值并更新它们。使用SELECT检索值,使用UPDATE更改它们。

您可以在UPDATE语句中使用SELECT作为calucalation的一部分,但结果将不是已更新内容的值,而只是已更新的行数。

您的SELECT语句中有一个小错误,应该如下:

SELECT SUM(a.val1*b.val1) FROM a, b WHERE a.val2 = 1 and b.val2 = 1;

这只返回一行:表a和b中val1列的乘积之和,其中val2列满足特定条件。

通过使用此结果更新表a,目前尚不清楚您要实现的目标。如果您希望在表a中设置val3,并在表a和b中使用val1的乘积,如果这些表中的val2满足特定条件,则以下可能有效,但您需要在两个表中的列之间添加连接,否则val3将被设置为表a中val1的乘积和表b中的所有val1值,这可能不是你想要的。

UPDATE a
SET a.val3 = 
(
SELECT a.val1*b.val1 
FROM b
WHERE b.key = a.key
AND b.val2 = condition2
)
WHERE a.val2 = condition1;

答案 2 :(得分:1)

这必须分两步完成 - 选择和聚合然后更新。

相关问题