sql - Updating a column with data from another table -


i have been trying update rows of column in database using following statement not working

update member_payment p  set    debtor_receipt = (select sum(d.amount)                             debtor_receipt d,                                  customer c,                                  dairy_member m,                                  member_payment p,                                  vendor v                            m.member_id = c.member                                  , d.customer = c.customer_id                                  , p.payee = v.vendor_id                                  , v.member = m.member_id                                  , d.txn_date = '2013-04-30')   p.payee in(select vendor_id                      vendor v,                           debtor_receipt d,                           customer c,                           dairy_member m,                           member_payment p                     v.member = m.member_id                           , m.member_id = c.member                           , d.customer = c.customer_id                           , d.txn_date = '2013-04-30')         , p.txn_date = '2013-05-08' 

your second subselect lacks join condition member_payment p, getting cartesian join, undesirable.

this reason should use modern join syntax, because can see how each table getting joined. also, not re-use p alias in both update statement , subselects. example, have patched second subselect adding join condition p.payee = v.vendor_id first subselect:

update member_payment set debtor_receipt =      (select sum(d.amount)      debtor_receipt d     join customer c on c.customer_id = d.customer     join dairy_member m on m.member_id = c.member     join vendor v on v.member = m.member_id     join member_payment p on p.payee = v.vendor_id     d.txn_date = '2013-04-30')  payee in      (select v.vendor_id      debtor_receipt d      join customer c on c.customer_id = d.customer     join dairy_member m on m.member_id = c.member     join vendor v on v.member = m.member_id     join member_payment p on p.payee = v.vendor_id     d.txn_date = '2013-04-30')  , txn_date = '2013-05-08' 

i'm not sure update statement trying do. perhaps intend first subselect sum debtor_receipt.amount each member_payment.payee returned second subselect? can remove member_payment table subselects, since vendor table contains necessary vendor_id. like:

update mp set mp.debtor_receipt =      (select sum(d.amount)      debtor_receipt d     join customer c on c.customer_id = d.customer     join dairy_member m on m.member_id = c.member     join vendor v on v.member = m.member_id     d.txn_date = '2013-04-30'     , v.vendor_id = mp.payee)  member_payment mp mp.payee in      (select v.vendor_id      debtor_receipt d      join customer c on c.customer_id = d.customer     join dairy_member m on m.member_id = c.member     join vendor v on v.member = m.member_id     d.txn_date = '2013-04-30')  , mp.txn_date = '2013-05-08' 

you should run subselects individually , work on them until returning data expect, , assemble them update statement want.


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -