public inbox for [email protected]
help / color / mirror / Atom feedFrom: Andreas Kretschmer <[email protected]>
To: [email protected]
Subject: Re: Removing duplicate rows in table
Date: Tue, 10 Sep 2024 17:28:15 +0200
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
Am 10.09.24 um 17:07 schrieb Rich Shepard:
> I've no idea how I entered multiple, identical rows in a table but I
> want to
> delete all but one of these rows.
>
> Here's an example:
>
> bustrac=# select * from projects where proj_nbr = '4242.01';
> proj_nbr | proj_name | start_date | end_date | description |
> notes
> ----------+----------------+------------+------------+---------------+-------
> 4242.01 | Expert witness | 2008-10-15 | 2008-10-28 | Consol Energy |
> 4242.01 | Expert witness | 2008-10-15 | 2008-10-28 | Consol Energy |
> 4242.01 | Expert witness | 2008-10-15 | 2008-10-28 | Consol Energy |
> 4242.01 | Expert witness | 2008-10-15 | 2008-10-28 | Consol Energy |
> (4 rows)
>
> How do I clean this up so there's only a single row for this project
> number?
>
> TIA,
>
> Rich
>
>
you can use the hidden ctid-column:
postgres=# create table demo (id int, val text);
CREATE TABLE
postgres=# insert into demo values (1, 'test1');
INSERT 0 1
postgres=# insert into demo values (1, 'test1');
INSERT 0 1
postgres=# insert into demo values (1, 'test1');
INSERT 0 1
postgres=# insert into demo values (1, 'test1');
INSERT 0 1
postgres=# select ctid, * from demo;
ctid | id | val
-------+----+-------
(0,1) | 1 | test1
(0,2) | 1 | test1
(0,3) | 1 | test1
(0,4) | 1 | test1
(4 rows)
postgres=# with my_ctid as (select min(ctid) from demo where id = 1 and
val = 'test1') delete from demo using my_ctid where id=1 and val='test1'
and ctid != my_ctid.min;
DELETE 3
postgres=# select ctid, * from demo;
ctid | id | val
-------+----+-------
(0,1) | 1 | test1
(1 row)
postgres=#
--
Andreas Kretschmer
CYBERTEC PostgreSQL Services and Support
view thread (16+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected]
Subject: Re: Removing duplicate rows in table
In-Reply-To: <[email protected]>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox