SQL语法问题
关于更新的SQL语法问题。通过下面的例子提问会容易得多:SQL语法问题,sql,mysql,Sql,Mysql,关于更新的SQL语法问题。通过下面的例子提问会容易得多: **Payments Table** ID user_id payment_due payment_made 1 3 10.0 5.0 1 3 10.0 10.0 1 9 20.0 20.0 **Balance Table** ID user_id current_balance
**Payments Table**
ID user_id payment_due payment_made
1 3 10.0 5.0
1 3 10.0 10.0
1 9 20.0 20.0
**Balance Table**
ID user_id current_balance
1 3 ???
2 9 ???
假设我想更新特定用户的当前余额。添加所有支付费用并从为特定用户支付的所有费用中减去这些费用,正确而高效的SQL语法是什么
在这种情况下,用户“3”的当前_余额为5.0,用户“9”的当前_余额为0.0
select
ID,
user_id,
(sum(payment_due) - sum(payment_made)) current_balance
from
PaymentsTable
group by
ID,
user_id
那么:
select
ID,
user_id,
(sum(payment_due) - sum(payment_made)) current_balance
from
PaymentsTable
group by
ID,
user_id
您需要使用子查询。像这样的方法应该会奏效:
UPDATE
balance_table b
SET
current_balance = (SELECT
SUM(payment_due - payment_made)
FROM
payments_table p
WHERE
p.user_id = b.user_id)
您需要使用子查询。像这样的方法应该会奏效:
UPDATE
balance_table b
SET
current_balance = (SELECT
SUM(payment_due - payment_made)
FROM
payments_table p
WHERE
p.user_id = b.user_id)
要更新表,请使用子查询:
UPDATE Balance_Table b
SET current_balance =
( SELECT SUM( payment_due - payment_made )
FROM Payments_Table p
WHERE p.user_id = b.user_id
)
考虑一下更新方法。您的
余额表
将在付款表
更改后立即失去同步,因此您最好从中实际选择数据。要更新您的表,请使用子查询:
UPDATE Balance_Table b
SET current_balance =
( SELECT SUM( payment_due - payment_made )
FROM Payments_Table p
WHERE p.user_id = b.user_id
)
考虑一下更新方法。您的
余额表
将在付款表
更改后立即失去同步,因此您最好从中实际选择数据。这可能是最好的方法。不要保留余额
表格,因为余额会不断变化。您甚至可以将此查询转换为视图,使其行为类似于余额
表。或者使用触发器保持数据同步。如上所述,不要保持余额表…存储计算字段(当前余额)违反了规范化规则,请使用查询在fly上获取数据感谢所有人的建议。我认为最好不要使用当前的平衡表,这可能是最好的方法。不要保留余额
表格,因为余额会不断变化。您甚至可以将此查询转换为视图,使其行为类似于余额
表。或者使用触发器保持数据同步。如上所述,不要保持余额表…存储计算字段(当前余额)违反了规范化规则,请使用查询在fly上获取数据感谢所有人的建议。我认为最好不要使用当前的余额表我想他可以在付款表上触发这个更新语句。这将消除一些差异。@cmptrgeekken:使用触发器是可能的。如果Payments\u Table
中有很多记录,但只有很少的记录更改,并且经常查询Balance\u Table
的结果,那么这可能是正确的方法。否则,只对Payments\u Table
进行汇总将是更简单的方法。我想他可以在Payments
表上触发这个更新语句。这将消除一些差异。@cmptrgeekken:使用触发器是可能的。如果Payments\u Table
中有很多记录,但只有很少的记录更改,并且经常查询Balance\u Table
的结果,那么这可能是正确的方法。否则,只需将付款汇总到表中就更容易了。