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
Post a Comment