From: | "Albe Laurenz" <laurenz(dot)albe(at)wien(dot)gv(dot)at> |
---|---|
To: | "David Greco *EXTERN*" <David_Greco(at)harte-hanks(dot)com>, <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: UPDATE syntax |
Date: | 2012-11-30 08:46:50 |
Message-ID: | D960CB61B694CF459DCFB4B0128514C208C0C993@exadv11.host.magwien.gv.at |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
David Greco wrote:
> Need some help with UPDATE syntax. I am attempting to do something
like this:
>
> WITH default_facility AS (
> SELECT facility_id,
> inkjetorlabel
> FROM engagement_facility_defs
> WHERE engagement_facility_def_id = 8
> )
> UPDATE engagement_facilities SET (
> facility_id,
> inkjetorlabel
> )
> = ( default_facility.* )
> FROM default_facility
> WHERE engagement_facilities.engagement_id =3
>
> Postgres errors out on the SET() saying "number of columns does not
match number of values". Also
> tried default_facility.* without the parenthesis but it does not like
that syntax. This example is a
> bit simplified, in reality there are 90 columns in both lists.
>
> Is this syntax not possible? I have rewritten it to this form which
works, but I rather like the CTE
> syntax instead.
The problem seems to be the "*".
It works fine with CTE otherwise:
CREATE TABLE test (id integer primary key, val text);
INSERT INTO test VALUES (1, 'something');
WITH cte AS (SELECT 1 AS c1, 'other' AS c2)
UPDATE test SET (id, val) = (cte.c1, CTE.c2)
FROM cte
WHERE id=1;
Yours,
Laurenz Albe
From | Date | Subject | |
---|---|---|---|
Next Message | Albe Laurenz | 2012-11-30 09:04:55 | Re: libpq - PQsendQuery wait for complete result |
Previous Message | Justin Julicher | 2012-11-30 06:32:55 | Re: Updating pg_attribute to widen column |