Re: update empty column according to existen data
Date: 13 Jul 2003 12:20:11 -0700
Message-ID: <a9c648ec.0307131020.2054965c_at_posting.google.com>
"Ievel" <ievel{-removeit-}_at_skynet.be> wrote in message news:<3f113957$0$288$ba620e4c_at_reader1.news.skynet.be>...
> "Ricky" <iqboss_at_hotmail.com> wrote in message
> news:a9c648ec.0307111115.14fe5ef0_at_posting.google.com...
> > HI, I have a question given that I have a table T
> >
> > en1_id | en1 | en2_id | en2
> > 1        A     (empty)  B
> > 2        B     (empty)  C
> > 3        C     (empty)  D
> >
> > eventually I want to update en2_id according to en1 which mean if
> > en2=en1 set en2_id to en1_id. If en2 is not in en1 then create a new
> > id for en2_id
> >
> > the end table looks like
> > en1_id | en1 | en2_id | en2
> > 1        A     2        B
> > 2        B     3        C
> > 3        C     4        D
> >
> > I first try to build a view
> > >create view VT as select * from T;
> >
> > then I do update
> > >update T
> > set en2_id=en1_id
> > where T.en2 in(select VT.en1 from VT);
> >
> > but this give me something like
> > 1 A 1 B
> > 2 B 2 C
> > 3 C e D
> > It just set en2_id=en1_id on the same row instead of setting it to the
> > corresponding row.
> >
> > is there any way to update the table to the way I wanted
> >
> > Thanks alot !!!
> >
> > Ricky
> 
> I haven't been able to test the following and you probably can find more
> performant statements, but it think it does the job:
> 
> UPDATE T t1
>    SET en2_id = DECODE(SELECT 1
>                          FROM T t2
>                         WHERE t2.en1 = t1.en2
>                       ,1,(SELECT en1_id
>                             FROM T t4
>                            WHERE t4.en1 = t1.en2)
>                       ,(SELECT MAX(t3.en1_id)+1
>                            FROM T t3)
>                       );
> 
> ieVel
Thank you for your reply,
However, when I put in your query I got error
SQL> update en10p t1
  2  set en2_id=DECODE((select 1 from en10p t2
  3  where t2.en1=t1.en2)
  4  ,1,(select en1_id from en10p t4
  5  where t4.en1=t1.en2)
  6  ,(select max(t3.en1_id)+1
  7  from en10p t3)
  8  );
ERROR at line 2:
ORA-01427: single-row subquery returns more than one row
Forgot to mention that the example I given is just an example the realy table has more than 200K entries thus it might return more than 1 row in the subquery. Is there any way to over come this.
Thanks Received on Sun Jul 13 2003 - 21:20:11 CEST
