Re: getting rid of "Adding missing FROM-clause entry...." - Mailing list pgsql-sql

From Manfred Koizar
Subject Re: getting rid of "Adding missing FROM-clause entry...."
Date
Msg-id nglt9vsctac48010936fbs2k6rmo8f1202@4ax.com
Whole thread Raw
In response to Re: getting rid of "Adding missing FROM-clause entry...."  (Rajesh Kumar Mallah <mallah@trade-india.com>)
List pgsql-sql
On Thu, 17 Apr 2003 21:22:17 +0530, Rajesh Kumar Mallah
<mallah@trade-india.com> wrote:
>i think two of your queries will work for me.

I hope so, but ...

>I wrote:
>> UPDATE t_a
>>    SET fname2=foo.fname , mname2=foo.mname
>>   FROM (SELECT DISTINCT ON (b2.id) b2.id, b2.fname, b2.mname
>>         FROM t_b AS b1, t_b AS b2
>>        WHERE b1.id = b2.id AND b1.con_id < b2.con_id
>>        ORDER BY b2.id, b2.con_id) AS foo
>>  WHERE t_a.id = foo.id;

... this can be slow, if you have large groups of equal id, because
each group blows up to n^2/2 rows.  You might be better off with a
subselect like
SELECT DISTINCT ON (b2.id) b2.id, b2.fname, b2.mname  FROM t_b AS b2 WHERE EXISTS (SELECT *               FROM t_b AS
b1              WHERE b1.id = b2.id AND b1.con_id < b2.con_id) ORDER BY b2.id, b2.con_id
 

or
SELECT b2.id, b2.fname, b2.mname  FROM t_b AS b2 WHERE (SELECT count(*)          FROM t_b AS b1         WHERE b1.id =
b2.idAND b1.con_id < b2.con_id) = 1
 

The latter having the advantage of being standard SQL.  You have to
experiment a little to find out what works best for you.

BTW, my proposed UPDATE statements don't handle this case very well:
id | con_id | fname | mname
----+--------+-------+------- 1 |      1 | first | ... 1 |      1 | 2nd   | ... 1 |      2 | 3rd   | ... 1 |      2 |
4th  | ...
 

ServusManfred



pgsql-sql by date:

Previous
From: Tom Lane
Date:
Subject: Re: planner question..
Next
From: Randall Lucas
Date:
Subject: Ordinal value of row within set returned by a query?