Re: how to update table to make dup values distinct
| От | Harald Fuchs |
|---|---|
| Тема | Re: how to update table to make dup values distinct |
| Дата | |
| Msg-id | 871x1n5jwm.fsf@srv.protecting.net обсуждение исходный текст |
| Ответ на | how to update table to make dup values distinct (george young <gry@ll.mit.edu>) |
| Список | pgsql-sql |
In article <20051110105818.4dc51e8c.gry@ll.mit.edu>,
george young <gry@ll.mit.edu> writes:
> [PostgreSQL 7.4RC2 on i686-pc-linux-gnu](I know, I know... must upgrade soon)
> I have a table mytable like:
> i | txt
> ---+-------
> 1 | the
> 2 | the
> 3 | rain
> 4 | in
> 5 | mainly
> 6 | spain
> 7 | stays
> 8 | mainly
> 9 | in
> I want to update it, adding a ':' to txt so that each txt value is unique.
> I don't care which entry gets changed. I tried:
> update mytable set txt=mytable.txt || ':' from mytable t2 where mytable.txt=t2.txt and mytable.i=t2.i;
> but this updated both duplicated entries.
> Um, there may sometimes be 3 or 4 duplicates, not just two. For these, I can add multiple colons, or one each of an
assortmentof characters, say ':+*&^#'.
> Performance does not matter here. The real table has 30K rows, ~200 dups.
> To clarify, I want to end up with something like:
> 1 | the
> 2 | the:
> 3 | rain
> 4 | in
> 5 | mainly:
> 6 | spain
> 7 | stays
> 8 | mainly
> 9 | in:
Try the following:
UPDATE mytable SET txt = txt || substring ('::::::::::::::::' for ( SELECT count(*) FROM mytable t1 WHERE
t1.txt= mytable.txt AND t1.i < mytable.i )::int)
В списке pgsql-sql по дате отправления: