Re: FAQ addition: deleteing all but one unique row

From: Kris Jurka <books(at)ejurka(dot)com>
To: <greg(at)turnstep(dot)com>
Cc: <pgsql-patches(at)postgresql(dot)org>
Subject: Re: FAQ addition: deleteing all but one unique row
Date: 2003-02-12 18:52:43
Message-ID: Pine.LNX.4.33.0302121350360.17645-100000@leary.csoft.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches


You have still not addressed Tom's initial complaint about the delete
deleting all but one row in the table. Shouldn't there be a "WHERE id=12"
on the delete as well?

Kris Jurka

On Wed, 12 Feb 2003 greg(at)turnstep(dot)com wrote:

>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> NotDashEscaped: You need GnuPG to verify this message
>
>
> Second shot at a small doc patch, this time with testing. :)
>
> --
> Greg Sabino Mullane greg(at)turnstep(dot)com
> PGP Key: 0x14964AC8 200302121158
>
>
> Index: FAQ.html
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/doc/src/FAQ/FAQ.html,v
> retrieving revision 1.164
> diff -c -r1.164 FAQ.html
> *** FAQ.html 2002/12/05 05:47:44 1.164
> --- FAQ.html 2003/02/10 15:08:00
> ***************
> *** 139,144 ****
> --- 139,145 ----
> temporary tables in PL/PgSQL functions?<BR>
> <A href="#4.27">4.27</A>) What replication options are available?<BR>
> <A href="#4.28">4.28</A>) What encryption options are available?<BR>
> + <A href="#4.29">4.29</A>) How can I delete all but one identical row?<BR>
>
>
> <H2 align="center">Extending PostgreSQL</H2>
> ***************
> *** 1381,1386 ****
> --- 1382,1406 ----
> <I>PASSWORD_ENCRYPTION</I> in <I>postgresql.conf</I>.</LI>
> <LI>The server can run using an encrypted file system.</LI>
> </UL>
> +
> + <H4><A name="4.29">4.29</A>) How can I delete all but one identical row?<BR>
> + </H4>
> + <P>Sometimes you have rows that are so identical that a simple WHERE clause cannot
> + distinguish them apart. Each row always has a unique system column named
> + <CODE><SMALL>ctid</SMALL></CODE> that can be used to differentiate them. Use
> + <SMALL>LIMIT 1</SMALL> to get back the ctid of one of the identical rows,
> + then remove all matching rows except the one with that particular ctid:</P>
> + <PRE>
> + DELETE FROM mytable WHERE NOT ctid =
> + (SELECT ctid FROM mytable WHERE id=12 LIMIT 1);
> + </PRE>
> +
> + <P>In the above example, all rows in the table named 'mytable' having a value
> + of 12 in the 'id' column will be deleted except for one. Exactly
> + which row is kept should not matter, as they are all otherwise identical.
> + The system column <CODE><SMALL>oid</SMALL></CODE> can also be used, but
> + because tables can be created without an oid column, the use of ctid
> + is preferred.</P>
>
> <HR>
>
> -----BEGIN PGP SIGNATURE-----
> Comment: http://www.turnstep.com/pgp.html
>
> iD8DBQE+Sn2LvJuQZxSWSsgRAlqDAJ930nb9V8hjAB1eh9Z7U6KU5mtSqwCeORKy
> ONNSW87tAIAzV/WveYSAiK8=
> =LOGw
> -----END PGP SIGNATURE-----
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
>

In response to

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Barry Lind 2003-02-12 20:40:55 Re: [PATCH]errors_zh_TW.properties for JDBC driver
Previous Message Greg Stark 2003-02-12 18:06:24 parse_expr.c another type produced by transformations?