ledger_id ledger_name dep_id dr_bal cr_bal
1 Purchase 2 NUll NUll
trans_id trans_date ledger_id ledger_name amount trans_type
1 3/2/2004 1 Purchase A/C 84500 dr
2 3/12/2004 6 Cash A/C 20000 cr
这些是我的表格Ledgers
和Transactions
。
我想从ledgers.dr_bal
更新transactions.amount
,
基于ledger_id
,即primary key
表中的ledgers
。
想要根据transactions.amount
dr_bal
复制到trans_type ='dr'
到目前为止,我已经尝试过了,
UPDATE ledgers
SET dr_bal =(select sum(If(tbl_transactions.trans_type = 'dr' AND transactions.ledger_id = 1), amount,0) FROM transactions)
where ledgers.ledger_id =1;
但我无法运行上述查询,因为它在最后的Where
子句中抛出错误。
尝试在此处查看与更新表相关的各种问题。但我真的被卡住了。
答案 0 :(得分:1)
尝试此查询!
UPDATE ledgers
LEFT JOIN
(SELECT
SUM(amount) soa, ledger_id
FROM
tbl_transactions
WHERE
tbl_transactions.trans_type = 'dr'
AND tbl_transactions.ledger_id = 1) t ON (ledgers.ledger_id = t.ledger_id)
SET
ledgers.dr_bal = coalesce(t.soa, 0);
如果您要使用交易金额更新所有分类帐,请删除tbl_transactions.ledger_id = 1
的条件并在子查询中引入GROUP BY tbl_transactions.ledger_id
。