更新每个第一次出现

时间:2014-10-22 22:45:07

标签: mysql sql-update

我有这两张桌子:

测试 ID suma ),其值如下:
1,1
1,2
2,3
2,4
2,5
3,6
3,7
3,8
3,9

付款 ID 金额),其中包含以下值:
1,5
1,7
1,11
2,14
2,3
3,4
3,



我需要做的是只更新测试表中每个id的第一个发生,并根据id更新第二个表中的总和(金额)。

到目前为止,我有这个,但它会更新所有发生的事件而不是每个id的第一个:

UPDATE test SET test.suma = (SELECT SUM(amount) FROM payments WHERE payments.id = test.id)


如果我添加 LIMIT 1 ,它只会更新第一个ID的第一行。我需要它来更新每个id的第一行(第一行1,第一行2,第一行3)

2 个答案:

答案 0 :(得分:1)

这个假设您的表id中没有多个suma test,如果您这样做,那就没问题了两者都更新了。

它还假设"第一"一个是suma最低的那个。除非您使用order by子句指定一个,否则关系表中没有顺序。

UPDATE test t
INNER JOIN (
    SELECT id, SUM(amount) amount FROM payments GROUP BY id
) p ON p.id = t.id
INNER JOIN (
    SELECT id, MIN(suma) suma FROM test GROUP BY id
) st ON t.id = st.id AND t.suma = st.suma
SET t.suma = p.amount;

答案 1 :(得分:1)

未经过测试

尝试此代码,它将更新每行测试,其中id仅包含suma的最小值。 手段。它只会更新每个不同ID的第一列

 UPDATE test SET test.suma = (SELECT SUM(amount) FROM payments 

 WHERE payments.id = (select test.id from test where suma = (select min(suma) from test)))