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

Langage SQL Discussion :

Exploitation d'une table possédant une relation recursive


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 44
    Points : 35
    Points
    35
    Par défaut Exploitation d'une table possédant une relation recursive
    Je voudrais pouvoir exploiter une table à l'aide d'une vue (ou autre chose si vous me conseillez mieux) de la manière suivante :

    J'ai une table LIGNES dont la clé primaire est NO_LIGNE et dont un des champs est NO_LIGNE_HISTO correspondant à un historique d'évolution des lignes et pointant sur un NO_LIGNE existant (clé étrangère de la table).

    Le champ NO_LIGNE_HISTO n'est donc pas forcement renseigné, il l'est dans le cas ou la ligne remplace une ligne déjà existante, rendant celle ci obsolete vis à vis de mes besoins, mais elle ne doit pas etre effacée pour autant.

    Je voudrais donc créer une vue comportant tous les champs de ma table + un nouveau champ obsolete ('V' ou 'F') indiquant que la ligne a été mise à jour et qu'elle n'est donc plus à prendre en compte

    J'ai su créer une requete me retournant les lignes utiles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT L1.NO_LIGNE,
        L1.VALEUR_MTNT,
        L1.VALEUR_TMPS,
        L1.NO_LIGNE_HISTO,
        L1.NO_BUDGET,
        L1.DATE_ECHEANCE,
        L1.TITRE_LIGNE,
        L1.DATE_CREATION,
        L1.COMMENTAIRE_HISTO,
        L1.LIB_COLLAB_CREA
    FROM LIGNES L1
    INNER JOIN LIGNES L2
    on L1.no_ligne<>L2.no_ligne_histo
    mais j'ai du mal à voir comment aller plus loin sans créer un champ OBSOLETE dans ma table LIGNES à remplir automatiquement lors d'une historisation.

    S'il est possible de ne pas modifier ma table et de créer simplement une vue l'exploitant en me retournant ce champs obsolete ca m'interesse!

    Si j'ai pas été tres clair dites le

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Fait une union des lignes valides avec les lignes non valides, avec un flg supplémentaire 'V' ou 'F' dans chacune des sous-requêtes de l'union
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 44
    Points : 35
    Points
    35
    Par défaut
    Merci ca marche

    Si ca peut interresser quelqu'un la requete finale est la suivante:

    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
    SELECT L1.NO_LIGNE,
         L1.VALEUR_MTNT,
         L1.VALEUR_TMPS,
         L1.NO_LIGNE_HISTO,
         L1.NO_BUDGET,
         L1.DATE_ECHEANCE,
         L1.TITRE_LIGNE_BUDGET,
         L1.DATE_CREATION,
         L1.COMMENTAIRE_HISTO,
         L1.LIB_COLLAB_CREA,
         'V' AS OBSOLETE
         FROM LIGNES L1
         INNER JOIN LIGNES L2
                    on L1.no_ligne=L2.no_ligne_histo
    UNION
         SELECT L1.NO_LIGNE,
         L1.VALEUR_MTNT,
         L1.VALEUR_TMPS,
         L1.NO_LIGNE_HISTO,
         L1.NO_BUDGET,
         L1.DATE_ECHEANCE,
         L1.TITRE_LIGNE_BUDGET,
         L1.DATE_CREATION,
         L1.COMMENTAIRE_HISTO,
         L1.LIB_COLLAB_CREA,
         'F' AS OBSOLETE
         FROM LIGNES L1
         INNER JOIN LIGNES L2
                    on L1.no_ligne<>L2.no_ligne_histo;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  2. Réponses: 1
    Dernier message: 19/10/2011, 12h13
  3. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  4. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  5. Copier les enregistrements d'une table vers une table d'une autre DB
    Par karinette21 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2008, 21h50

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