Thread: UPDATE the field of a table with fields from another table

UPDATE the field of a table with fields from another table

From
Balvie
Date:
Hi,

I use: Postgres 7.3.10 and Pgadmin 1.4.3 on RH Linux

I got 2 tables with names and telephone numbers:

CREATE TABLE b1_naam
(
   relcode varchar(10),
   naam varchar(100),
   telnr varchar(30)
)

CREATE TABLE b1_telco
(
   relcode varchar(10),
   telnr varchar(30),
   ppc varchar(25)
)

and I need to restore some data. I created something like:

UPDATE b1_naam
   SET telnr = t.telnr
   FROM b1_telco as t
   WHERE
     b1_naam.relcode = b1_telco.relcode AND
     b1_naam.naam like 'Bakke%';

Can anyone tell me what I did wrong? I have seen very complicated
statements with nested selects. I cannot believe that a simple query,
like the one I wrote above, is not available.

Thanks,

Balvie

Re: UPDATE the field of a table with fields from another table

From
Tom Lane
Date:
Balvie <ener@ibb.nl> writes:
> UPDATE b1_naam
>    SET telnr = t.telnr
>    FROM b1_telco as t
>    WHERE
>      b1_naam.relcode = b1_telco.relcode AND
                         ^^^^^^^^ should be t
>      b1_naam.naam like 'Bakke%';

Less-obsolete versions of Postgres would have warned you about this,
or even reported it as an error.

            regards, tom lane

Re: UPDATE the field of a table with fields from another

From
Balvie
Date:
> Balvie <ener@ibb.nl> writes:
>
>> UPDATE b1_naam
>>    SET telnr = t.telnr
>>    FROM b1_telco as t
>>    WHERE
>>      b1_naam.relcode = b1_telco.relcode AND
>>
>                          ^^^^^^^^ should be t
>
>>      b1_naam.naam like 'Bakke%';
>>
>
> Less-obsolete versions of Postgres would have warned you about this,
> or even reported it as an error.
>
>             regards, tom lane
>
>
Thanks Tom,

I did try a lot myself, taking different appraoches and  structures and
different queries. Together with your tip's I changed it finally this
morning to:

update b1_telco
    set  telnr = n.telnr
    from
    b1_telco as t inner join b1_naam as n on t.relcode = n.relcode
    where
        n.naam like 'Bakk%';

and it still has flaws.

Observations:
a. *All* records were affected  instead of those specified in the
where-clause.
b. the value to which the field is set (set  telnr = n.telnr), is the
same for all affected records. My intention was to copy the
corresponding fields.
c. there are no sql errors:  Query returned successfully: 10246 rows
affected, 422 ms execution time.

I'd very much like to hear the response(s).

Balvie