Обсуждение: Need help on update.

Поиск
Список
Период
Сортировка

Need help on update.

От
Nicholas I
Дата:
Hi, <br /><br />there are two tables, table1 and table2, each having same column name called sn_no,name. i want to
updatetable1 names with table2 where sn_no are same.<br /><br />select * from table1;<br />sn_no |   name    <br
/>-------+-----------<br/>      1 | ramnad<br />     2 | bangalore<br />     3 | chennai<br /><br /><br />select * from
table2;<br/> sn_no |   name    <br />-------+-----------<br />     1 | Hyderabad<br />     2 | Delhi<br />     3 |
Bombay<br/><br />Any help ?<br /><br /> I tried with , some of the queries like, <br /><br /><b>UPDATE table1 SET name
=(select name from table2) where table2.sn_no = table1.sn_no;</b><br />ERROR:  missing FROM-clause entry for table
"table2"<br/>LINE 1: ...table1 SET name = (select name from table2) where table2.sn_.<br /><br /><b>UPDATE table1 inner
jointable2 on table2.sn_no = table1.sn_no set <a href="http://table2.name">table2.name</a> = <a
href="http://table1.name">table1.name</a>;</b><br/>ERROR:  syntax error at or near "inner"<br /> LINE 1: UPDATE table1
innerjoin table2 on table2.sn_no = table1.sn_...<br /><br />-Nicholas I<br /><br /><br /> 

Re: Need help on update.

От
Richard Huxton
Дата:
On 21/10/10 08:43, Nicholas I wrote:
> Hi,
>
> there are two tables, table1 and table2, each having same column name
> called sn_no,name. i want to update table1 names with table2 where sn_no
> are same.
>
> select * from table1;
> sn_no |   name
> -------+-----------
>       1 | ramnad
>       2 | bangalore
>       3 | chennai
>
>
> select * from table2;
>   sn_no |   name
> -------+-----------
>       1 | Hyderabad
>       2 | Delhi
>       3 | Bombay
>
> Any help ?
>
> I tried with , some of the queries like,

Close. This is surprisingly difficult in standard SQL. PostgreSQL has a 
(non-standard) FROM clause you can use though.

BEGIN;

CREATE TABLE table1 (sn int, nm text);
CREATE TABLE table2 (sn int, nm text);
INSERT INTO table1 VALUES (1,'ramnad'),(2,'bangalore'),(3,'chennai');
INSERT INTO table2 VALUES (1,'Hyderabad'),(2,'Delhi'),(3,'Bombay');

UPDATE table1 SET nm = table2.nm
FROM table2
WHERE table1.sn = table2.sn;

SELECT * FROM table1;

ROLLBACK;

Be careful with aliasing the target of the update (table1 in this case). 
As another poster has discovered, that counts as another table in your join.

--   Richard Huxton  Archonet Ltd


Re: Need help on update.

От
Nicholas I
Дата:
that was amazing, it worked thanks a lot.

-Nicholas I

On Thu, Oct 21, 2010 at 1:40 PM, Richard Huxton <dev@archonet.com> wrote:
On 21/10/10 08:43, Nicholas I wrote:
Hi,

there are two tables, table1 and table2, each having same column name
called sn_no,name. i want to update table1 names with table2 where sn_no
are same.

select * from table1;
sn_no |   name
-------+-----------
     1 | ramnad
     2 | bangalore
     3 | chennai


select * from table2;
 sn_no |   name
-------+-----------
     1 | Hyderabad
     2 | Delhi
     3 | Bombay

Any help ?

I tried with , some of the queries like,

Close. This is surprisingly difficult in standard SQL. PostgreSQL has a (non-standard) FROM clause you can use though.

BEGIN;

CREATE TABLE table1 (sn int, nm text);
CREATE TABLE table2 (sn int, nm text);
INSERT INTO table1 VALUES (1,'ramnad'),(2,'bangalore'),(3,'chennai');
INSERT INTO table2 VALUES (1,'Hyderabad'),(2,'Delhi'),(3,'Bombay');

UPDATE table1 SET nm = table2.nm
FROM table2
WHERE table1.sn = table2.sn;

SELECT * FROM table1;

ROLLBACK;

Be careful with aliasing the target of the update (table1 in this case). As another poster has discovered, that counts as another table in your join.

--
 Richard Huxton
 Archonet Ltd