Thread: question about visibilty while updating multiple rows .
Hi, If an update statement is affecting multiple rows of a table X , Does a subselect (selecting from X only) inside EXISTS part of outer query able to see the changes when rows are being updated one by one by outer query? for example consider following set of data rows: +------------+-----------------------+------+----------+----------------------------------+ | profile_id | co_name | size | deletion | md5 | +------------+-----------------------+------+----------+----------------------------------+ | 212161 | ATITH FIBRE PVT. LTD. | FL | t | edc462794427724b7d132e3b1387d69f | | 212159 | ATITH FIBRE PVT. LTD. | 1HS | f | edc462794427724b7d132e3b1387d69f | | 216225 | ATITH FIBRE PVT. LTD. | 1HS | f | edc462794427724b7d132e3b1387d69f | | 216226 | ATITH FIBRE PVT. LTD. | 1HS | f | edc462794427724b7d132e3b1387d69f | +------------+-----------------------+------+----------+----------------------------------+ begin work; UPDATE eyp_profiles_table SET deletion=true WHERE co_name='ATITH FIBRE PVT. LTD.' AND deletion is false and EXISTS (select * from eyp_profiles_table a where a.md5=eyp_profiles_table.md5and a.deletion is false and a.profile_id <> eyp_profiles_table.profile_id) ; my original problem is to update in such a way that i get below finally (observer the deletion column) +------------+-----------------------+------+----------+----------------------------------+ | profile_id | co_name | size | deletion | md5 | +------------+-----------------------+------+----------+----------------------------------+ | 212161 | ATITH FIBRE PVT. LTD. | FL | t | edc462794427724b7d132e3b1387d69f | | 212159 | ATITH FIBRE PVT. LTD. | 1HS | t | edc462794427724b7d132e3b1387d69f | | 216225 | ATITH FIBRE PVT. LTD. | 1HS | t | edc462794427724b7d132e3b1387d69f | | 216226 | ATITH FIBRE PVT. LTD. | 1HS | f | edc462794427724b7d132e3b1387d69f | +------------+-----------------------+------+----------+----------------------------------+ so that only one entry per md5 record exists. Regds mallah. -- Rajesh Kumar Mallah, Project Manager (Development) Infocom Network Limited, New Delhi phone: +91(11)6152172 (221) (L) ,9811255597 (M) Visit http://www.trade-india.com , India's Leading B2B eMarketplace.
> If an update statement is affecting multiple rows of a table X , > Does a subselect (selecting from X only) inside EXISTS part of outer query > able to see the changes when rows are being updated one by one by outer query? No, because it's part of the same query. I believe though that a user-defined function called from the update query would see the changes made so far. So possibly you can fix your problem by pushing the EXISTS down into a SQL or plpgsql function. regards, tom lane
On Wednesday 09 Apr 2003 8:42 pm, Tom Lane wrote: > > If an update statement is affecting multiple rows of a table X , > > Does a subselect (selecting from X only) inside EXISTS part of outer > > query able to see the changes when rows are being updated one by one by > > outer query? > > No, because it's part of the same query. > > I believe though that a user-defined function called from the update > query would see the changes made so far. So possibly you can fix your > problem by pushing the EXISTS down into a SQL or plpgsql function. Thanks for the explanation and suggestion Tom, I did it however by using intermediate tables and distinct on(). Regds Mallah. > > regards, tom lane > > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly -- Rajesh Kumar Mallah, Project Manager (Development) Infocom Network Limited, New Delhi phone: +91(11)6152172 (221) (L) ,9811255597 (M) Visit http://www.trade-india.com , India's Leading B2B eMarketplace.