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

DB2 Discussion :

Requêtage sur 2 tables aux structures identiques


Sujet :

DB2

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 21
    Points
    21
    Par défaut Requêtage sur 2 tables aux structures identiques
    Bonjour,

    J'ai une petite question sur le requêtage de 2 tables distinctes mais aux structures identiques (pour des raisons de cloisonnement).
    Supposons 2 tables : TABLE_1 et TABLE_2 ayant pour structure IDT_ENR DEC(15), CD_ETA CHAR(3), TM_STP TIMESTAMP.
    Pour complément, l'IDT_ENR est unique, on ne peut pas avoir un même IDT_ENR dans les 2 tables.

    Comment peut-on faire (si possible) pour récupérer par exemple les 100 derniers enregistrements (sur les 2 tables) (TIMESTAMP le plus récent) où le CD_ETA = 'XXX' ?
    Il peut donc y en avoir que sur une seule table ou sur les 2 en proportion variable.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Il suffit de faire un order by descending sur le timestamp et d'ajouter la clause fetch first 100 rows only
    si le volume dans les tables est conséquent, un index secondaire sur le timestamp sera le bienvenu (descending aussi bien sur)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    OK pour les ORDER BY et FETCH que je connaissais déjà, mais comment faire pour lier les 2 tables ?

    Je vois bien comment récupérer sur chacune des tables distinctement mais pas comment faire sur les 2 en une fois...

    Aurais-tu un exemple de requête ?

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Voici un exemple de requete :

    Select 'TAB1', IDT_ENR, CD_ETA, TM_STP
    from TABLE_1
    Union
    Select 'TAB2', IDT_ENR, CD_ETA, TM_STP
    from TABLE_2
    Order by TM_STP desc
    fetch first 100 rows only

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    J'ajoute une question :

    Pourquoi ne pas avoir plutot partitionné la table plutot que de la dupliquer ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    S'il y a bien un truc que je ne maitrise pas c'est bien les UNION, INNER JOIN et autres...

    Je vais tester ça.

    Merci...

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    J'ajoute une question :

    Pourquoi ne pas avoir plutot partitionné la table plutot que de la dupliquer ?
    C'est notre service de gestion de bases de données qui m'a préconisé cette solution.
    Je ne te dirai donc pas précisément pourquoi cette solution.
    Tout ce que je sais c'est qu'on voulait cloisonner les données en fonction de la source d'insertion et que, de ce que j'ai compris, 1 table = 1 fichier chez nous => du coup cloisonnement.
    N'étant pas expert je crois ce que l'on me dit

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par dalma Voir le message
    S'il y a bien un truc que je ne maitrise pas c'est bien les UNION, INNER JOIN et autres...
    UNION c'est juste mettre bout à bout le résultat de plusieurs requêtes, la condition nécessaire est que les requêtes collectent des données de même format et dans le même ordre

    INNER JOIN est la requete la plus souvent utilisée à l'insu de notre plein gré , car très souvent on code dans le where non seulement les critères de filtrage (c'est le but du where) mais aussi ceux de jointure, et, ce faisant, on code une requete de type INNER, c'est à dire qu'on ne sélectionne que les enregistrements pour lesquels il existe au moins un élément dans chaque table jointe. (cardinalité mini=1)

    La requete LEFT ou RIGHT OUTER permet de joindre les tables même s'il n'existe pas d'élément dans la table jointe
    La jointure FULL OUTER permet de faire un appareillage de tables : la cardinalité mini est alors de zéro de chaque coté.

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par dalma Voir le message
    Tout ce que je sais c'est qu'on voulait cloisonner les données en fonction de la source d'insertion et que, de ce que j'ai compris, 1 table = 1 fichier chez nous => du coup cloisonnement.
    Le partitionnement ne répond pas à la contrainte 1 table= 1 fichier, mais j'ai du mal à comprendre la raison d'une telle contrainte
    Car le partitionnement permet de ne décrire qu'une seule fois le contenant, la table, et de séparer les données dans plusieurs fichiers.

    Ce type de table est souvent utilisé dans les cas de très fortes volumétries (plusieurs dizaines de millions de lignes et au delà)
    Le gros intérêt et que chaque fichier a une vie autonome, on peut par exemple passer des utilitaires (sauvegarde, restaure, réorg...) sur des partitions, pendant que d'autres sont accessibles aux applications batch et TP

    Il est possible de gérer les habilitations via le partitionnement si le critère de partitionnement inclut un attribut fonctionnel (par exemple un code service). En ce cas on aura bien 2 sources d'insertion dans 2 partitions différentes d'une même table.

    il est aussi possible de gérer les habilitations via les vues DB2 (vue avec filtrage et/ou vue avec sélection de colonnes)

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    Merci bien pour les infos...
    Je m'en vais me documenter un peu plus sur les jointures par la même occasion

    En ce qui concerne les partitions, je t'avouerai que je ne maitrise pas vraiment cette partie et que notre service informatique étant assez conséquent (300 internes), la partie DB2 est administrée par 5/6 personnes (normalement) sachantes sur le sujet. Je n'ai pas trop discuté de la solution qu'ils voulaient mettre en place.

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    La décision des DBA est certainement la bonne, vu de l'extérieur avec si peu d'information, il est difficile de juger

    As tu pu vérifier si la requête répond à ton besoin ?

  12. #12
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 21
    Points
    21
    Par défaut
    En effet, la solution correspond bien à ce que je cherchais.
    Merci.

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

Discussions similaires

  1. copier plisieurs tables de structure identique vers une seule
    Par adelsunwind dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 30/03/2009, 17h16
  2. [MySQL] Requête sur 3 tables aux champs identiques
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/11/2008, 13h35
  3. Vue sur 2 tables de structures différentes
    Par thesmall dans le forum Langage SQL
    Réponses: 7
    Dernier message: 08/08/2007, 22h18
  4. Réponses: 5
    Dernier message: 28/05/2007, 12h52
  5. Comparer 2 tables de structure identique.
    Par FMaz dans le forum Requêtes
    Réponses: 13
    Dernier message: 31/03/2006, 23h48

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