无法在mysql

时间:2015-09-19 13:50:21

标签: mysql accounts

Ledgers表

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 

这些是我的表格LedgersTransactions。 我想从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子句中抛出错误。

尝试在此处查看与更新表相关的各种问题。但我真的被卡住了。

1 个答案:

答案 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