Обсуждение: 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.