IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Incrémentation d'une variable dans une view


Sujet :

Requêtes PostgreSQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 34
    Points : 35
    Points
    35
    Par défaut Incrémentation d'une variable dans une view
    Bonjour,

    Je souhaite regrouper toutes mes données (Pseudo Post date/pseudo description date/ etc) dans une seule vue. Je pense utiliser des UNION.
    Je suis sous Postgresql. Mais j'ai besoin d'avoir une Clef primaire, une variable qui s' incrémente, ou quelque chose comme ça car mon api de recherche nécessite une ID pour indexer les données.
    Vue que j' ai plusieur clef primaire je ne sais pas comment faire.

    Cordialement
    Austriker

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 220
    Points
    220
    Par défaut
    On peut utiliser une séquence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    CREATE SEQUENCE test_seq START WITH 0 MINVALUE 0 INCREMENT BY 1 MAXVALUE 999999999;
     
    SELECT Id, TestField
    FROM
    (SELECT setval('test_seq', 0)) INIT,
    (
        SELECT nextval('test_seq') AS Id, 'foobar' AS TestField
        UNION ALL
        SELECT nextval('test_seq'), libelle FROM Region
        UNION ALL
        SELECT nextval('test_seq'), 'foobar'
    ) V;
     
    Id;TestField
     
    1;"foobar"
    2;"Alsace"
    3;"Aquitaine"
    4;"Auvergne"
    5;"Basse-Normandie"
    6;"Bourgogne"
    7;"Bretagne"
    8;"Centre"
    9;"Champagne-Ardenne"
    10;"Corse"
    11;"Franche-Comté"
    12;"Haute-Normandie"
    13;"Ile-De-France"
    14;"Languedoc-Roussillon"
    15;"Limousin"
    16;"Lorraine"
    17;"Midi-Pyrénées"
    18;"Nord-Pas-De-Calais"
    19;"Pays-De-La-Loire"
    20;"Picardie"
    21;"Poitou-Charentes"
    22;"Provence-Alpes-Côte-D'Azur"
    23;"Rhône-Alpes"
    24;"Outre-Mer"
    25;"foobar"
    Le premier SELECT réinitialise la séquence à 0 avec setval(), puis les autres (UNION ALL ou UNION) l'incrémentent avec nextval().

    Mais quand on ajoute un where les id peuvent être différents et ne plus être consécutifs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    SELECT Id, TestField
    FROM
    (SELECT setval('test_seq', 0)) INIT,
    (
        SELECT nextval('test_seq') AS Id, 'foobar' AS TestField
        UNION ALL
        SELECT nextval('test_seq'), libelle FROM Region
        UNION ALL
        SELECT nextval('test_seq'), 'foobar'
    ) V
    WHERE Id > 5;
     
    Id;TestField
     
    7;"Bourgogne"
    9;"Bretagne"
    11;"Centre"
    13;"Champagne-Ardenne"
    15;"Corse"
    17;"Franche-Comté"
    19;"Haute-Normandie"
    21;"Ile-De-France"
    23;"Languedoc-Roussillon"
    25;"Limousin"
    27;"Lorraine"
    29;"Midi-Pyrénées"
    31;"Nord-Pas-De-Calais"
    33;"Pays-De-La-Loire"
    35;"Picardie"
    37;"Poitou-Charentes"
    39;"Provence-Alpes-Côte-D'Azur"
    41;"Rhône-Alpes"
    43;"Outre-Mer"
    45;"foobar"
    Ce n'est donc pas aussi idéal qu'avec ROWNUM d'Oracle par exemple...

Discussions similaires

  1. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  2. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23
  3. Réponses: 4
    Dernier message: 29/01/2008, 11h12
  4. Réponses: 1
    Dernier message: 15/02/2007, 00h24
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo