Thread: very basic SQL question

very basic SQL question

From
Dan Kortschak
Date:
Hi,

I'm using Pg for bioinformatic work and I want to be able to insert,
uniquely, biological sequences into a table returning the sequence id -
this part is fine. However, if the sequence already exists in the table
I want to return to id.

At the moment it seems to me that I should do a

SELECT id FROM table WHERE seq = '<sequence>';

and if that gives NULL then

INSERT .... RETURNING id;

But this seems long winded. Is there a better way to achieve what I
want?

thanks


Re: very basic SQL question

From
Sam Mason
Date:
On Tue, Nov 23, 2010 at 02:09:19PM +1030, Dan Kortschak wrote:
> I want to be able to insert,
> uniquely, biological sequences into a table returning the sequence id -
> this part is fine. However, if the sequence already exists in the table
> I want to return to id.

The term you're looking for is "UPSERT", the following looks relevant:

  http://stackoverflow.com/questions/1109061/insert-on-duplicate-update-postgresql

--
  Sam  http://samason.me.uk/

Re: very basic SQL question

From
Matthieu Huin
Date:
A similar question was discussed here about 3 weeks ago :
http://archives.postgresql.org/pgsql-general/2010-11/msg00110.php

The "UPSERT" facility not being implemented yet, I don't think it is
possible to do much better than what you came up with.

Assuming the column(s) holding the distinctive sequence data are defined
with the UNIQUE constraint, you could adapt the example function given
in the link to the documentation in the previous thread to achieve what
you want.

Hope this helps,

Matthieu

Le 23/11/2010 04:39, Dan Kortschak a écrit :
> Hi,
>
> I'm using Pg for bioinformatic work and I want to be able to insert,
> uniquely, biological sequences into a table returning the sequence id -
> this part is fine. However, if the sequence already exists in the table
> I want to return to id.
>
> At the moment it seems to me that I should do a
>
> SELECT id FROM table WHERE seq = '<sequence>';
>
> and if that gives NULL then
>
> INSERT .... RETURNING id;
>
> But this seems long winded. Is there a better way to achieve what I
> want?
>
> thanks
>
>

Re: very basic SQL question

From
Dan Kortschak
Date:
Thanks for that - yes very helpful. Good to know what is possible.

Dan

On Tue, 2010-11-23 at 10:27 +0100, Matthieu Huin wrote:
> A similar question was discussed here about 3 weeks ago :
> http://archives.postgresql.org/pgsql-general/2010-11/msg00110.php
>
> The "UPSERT" facility not being implemented yet, I don't think it is
> possible to do much better than what you came up with.
>
> Assuming the column(s) holding the distinctive sequence data are defined
> with the UNIQUE constraint, you could adapt the example function given
> in the link to the documentation in the previous thread to achieve what
> you want.
>
> Hope this helps,
>
> Matthieu