Thread: Table Alias posing problem in Update statements

Table Alias posing problem in Update statements

From
Pushker Chaubey
Date:

Hi experts,

I am facing a problem using a Alias on a table while updating that table.

I am trying something like

UPDATE Table1 T1 SET  = (SELECT DISTINCT col2 FROM Table2 T2 WHERE
T2.col3 = T1.col1)

T1 and T2 are table aliases.

Here I am trying to update a column in all the rows in table "Table1"
depending on value of another column for the same row.
But the query is not working. It is not allowing alias in the update
query (i.e. alias T1 on table "Table1").

Am I making a mistake somewhere in the syntax? Or, is it just not
supported in postgresql?
I am using postgreSQL version 8.2.

I have observed similar problems with delete statements also.
But these types of queries run successfully on Oracle.

Thanks in advance.
Pushker Chaubey


The information contained in this electronic message and any attachments to this message are intended for the exclusive
useof the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended
recipient,you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy
theoriginal message all copies of this message and any attachments. 
WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for
thepresence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. 

Please do not print this email unless it is absolutely necessary.

Re: Table Alias posing problem in Update statements

From
Ingmar Lötzsch
Date:
Read the SQL-Reference for your version. For PostgreSQL 8.1.3 this is

Synopsis
UPDATE [ ONLY ] table SET column = { expression | DEFAULT } [, ...]
     [ FROM fromlist ]
     [ WHERE condition ]

Description
UPDATE changes the values of the specified columns in all rows that
satisfy the condition. Only the columns to be modified need be mentioned
in the SET clause; columns not explicitly modified retain their previous
values.

By default, UPDATE will update rows in the specified table and all its
subtables. If you wish to only update the specific table mentioned, you
must use the ONLY clause.

There are two ways to modify a table using information contained in
other tables in the database: using sub-selects, or specifying
additional tables in the FROM clause. Which technique is more
appropriate depends on the specific circumstances.

You must have the UPDATE privilege on the table to update it, as well as
the SELECT privilege to any table whose values are read in the
expressions or condition.

Parameters
table
The name (optionally schema-qualified) of the table to update.

That means there is no alias allowed in UPDATE.

Ingmar

Pushker Chaubey schrieb:
>
> Hi experts,
>
> I am facing a problem using a Alias on a table while updating that table.
>
> I am trying something like
>
> UPDATE Table1 T1 SET  = (SELECT DISTINCT col2 FROM Table2 T2 WHERE
> T2.col3 = T1.col1)
>
> T1 and T2 are table aliases.
>
> Here I am trying to update a column in all the rows in table "Table1"
> depending on value of another column for the same row.
> But the query is not working. It is not allowing alias in the update
> query (i.e. alias T1 on table "Table1").
>
> Am I making a mistake somewhere in the syntax? Or, is it just not
> supported in postgresql?
> I am using postgreSQL version 8.2.
>
> I have observed similar problems with delete statements also.
> But these types of queries run successfully on Oracle.
>
> Thanks in advance.
> Pushker Chaubey