2016-09-27 16:22 GMT+13:00 Patrick B <patrickbake...@gmail.com>:

> Hi guys,
>
> I've got 2k rows in a table:
>
>> CREATE TABLE
>>     public.not_monthly
>>     (
>>     id BIGINT DEFAULT "nextval"('"id_seq"'::"regclass") NOT NULL,
>>     clientid BIGINT,
>>     name_first CHARACTER VARYING(80) DEFAULT ''::CHARACTER VARYING,
>>     name_last CHARACTER VARYING(80) DEFAULT ''::CHARACTER VARYING
>> );
>
>
> I want to insert data from public.not_monthly to
> public.table_1(clientid,name_first) and public.table_2(client_id,c_id*(FROM
> table_1)*,name_last)
>
> table_2.c_id must have the ID from the insert on the table_1 table.
>
> I did this:
>
>> WITH rows AS (
>> SELECT
>>                t1.id,
>>                     t1.clientid,
>>                     t1.name_first,
>>                     t1.name_last
>>                     row_number() OVER (ORDER BY t1.id) AS rn
>>             FROM
>>                     public.not_monthly t1
>>                     ),
>> ins_table_1 AS (
>> INSERT INTO public.table_1 (clientid,name_first)
>>         SELECT
>>                 clientid,
>>                 name_first
>>         FROM rows
>> RETURNING id
>> ),
>> ins_table_2 AS (
>> INSERT INTO public.table_2 (name_last,clientid)
>>         SELECT
>>                 name_last,
>>                 clientid
>>         FROM rows
>> RETURNING id
>> )
>
>
> Then, I was able to select the table_1.id using:
>
>> SELECT i.id AS table_1_id, s.id AS not_monthly_id
>> FROM (select id, row_number() OVER (ORDER BY id) AS rn FROM ins_table_1) i
>> JOIN rows s USING (rn)
>
>
> So I'd imagine now I would do the update? How can I update table_2.c_id
> with the ins_table_1.id value?
> I'm using Postgres 9.2
>
> Thanks
> Patrick
>


I'm doing this now:


sel AS (
> SELECT i.id AS c_id
> FROM (select id, row_number() OVER (ORDER BY id) AS rn FROM ins_table_1) i
> JOIN rows s USING (rn)
> )
> UPDATE table_2 SET c_id =
> (
>   SELECT c_id
>   FROM sel
>   ORDER BY c_id
> )
> WHERE clientid = 124312;


But I get *ERROR:  more than one row returned by a subquery used as an
expression*

Reply via email to