Re: SQL pour trouver le premier libre?

From: Jean-Paul Argudo <jean-paul(at)argudo(dot)org>
To: Pierre Couderc <pierre(at)couderc(dot)cc>
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: SQL pour trouver le premier libre?
Date: 2006-06-03 09:36:11
Message-ID: 4481580B.9050803@argudo.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Bonjour Pierre,

S'il s'agit d'assigner un nouvel ID en remplissant des trous, alors peut
être vous accepterez ma solution, qui ne vas pas vous donner "le plus
petit de ceux qui n'existent pas" quand le trou est supérieur à 1 unité.

Je m'explique:

Soit la table nombres (a integer):

test2=> select a from nombres;
a
----
1
2
3
6
7
8
10
11
12
13
14
15
16
19
(14 lignes)

On remarque que le "plus petit disponible" est 4. La requête suivante
vous ramène 5 le premier coup, vous faites votre insert avec ID=5, elle
vous ramènera 4 le suivant. Si vous faites votre insert avec ID=4, elle
elle vous ramènera 9, et ainsi dessuite:

test2=> select a-1 as id_disponible from nombres where a-1>0 except
select a from nombres order by id_disponible limit 1;

id_disponible
---------------
5
(1 ligne)

Je n'ai pas trop le temps d'investiguer plus en avant, dites-moi si
c'est plus performant ou pas...

Une astuce à 2¢ donc :-)

Cordialement,

--
Jean-Paul Argudo
www.PostgreSQLFr.org

In response to

Responses

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Jean-Paul Argudo 2006-06-03 09:38:00 Re: SQL pour trouver le premier libre?
Previous Message Pierre Couderc 2006-06-03 09:07:59 SQL pour trouver le premier libre?