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

PL/SQL Oracle Discussion :

Extraire les enregistrement depuis deux tables


Sujet :

PL/SQL Oracle

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut Extraire les enregistrement depuis deux tables
    Bonjour mes amis :

    j'ai une table TAB_GLOBAL Contient les champs SEQ, A,B,C,D,E

    j'ai deux autres tables TAB_EX1 (SEQ, A,B,C,D,E) , TAB_EX2 (SEQ, A,B,C,D,E)

    Je veux recupérer les ligne de la table TAB_GLOBAL qui sont dans TAB_EX1 ou TAB_EX2 ou :

    TAB_GLOBAL.SEQ > TAB_EX1.SEQ
    ou
    TAB_GLOBAL.SEQ > TAB_EX2.SEQ

    merci d'avance

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Et que est-ce qu'avez vous essayé; pouviez nous montrer votre requête ? Au moins quelle solution avez vous envisagé ?

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    pour TAB_EX1 j'ai essayé ce code, mais comme il s'agit de jointure , il me ramène plusieurs lignes

    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
     
    WITH CURSOR_A AS (SELECT A , B , C AS DEBIT , D AS DATE, E AS TAB_GLOBAL_AMT, F AS SEQ
                        FROM TAB_GLOBAL 
                       WHERE CODE  = 2
                         AND C IN (2200,2202)
                         AND D >= '01/10/2018' ) ,
         CURSOR_B AS (SELECT A , B , C AS BLM ,D AS DATEMAS, AMT AS AMT_TAB_EX1 ,F AS SEQ2
                        FROM TAB_EX1
                       WHERE D >= '01/10/2018'
                         AND C LIKE '2%'       ) 
     
     SELECT A , B ,DEBIT, DATE , TAB_GLOBAL_AMT , AMT_TAB_EX1,BLM, DATE_TAB_EX1 , SEQ , SEQ2  
       FROM CURSOR_A NATURAL JOIN CURSOR_B   
      WHERE SEQ   >  SEQ2 
        AND DATE   = DATE_TAB_EX1
        AND TAB_GLOBAL_AMT <= AMT_TAB_EX1

    existe t-il d'autres solutions plus sûres?

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 226
    Par défaut
    Ta question est incompréhensible.

    Imagine que tu parles à un non-informaticien (ton coiffeur par exemple). Et essaie d'expliquer ce que tu veux faire avec des mots qu'il va comprendre.
    Quand ton besoin sera exprimé de façon suffisamment claire pour que ton coiffeur comprenne, traduire ce besoin dans une autre langue (traduire en SQL par exemple), ce sera très facile.

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Merci pour ton retour mais...
    mon message est bien clair, je vais illustrer par un exemple :

    je vais appelé :
    SEQ sur TAB_GLOBAL
    SEQ1 sur TAB_EX1
    SEQ2 sur TAB_EX2

    TAB_GLOBAL (10, aaa, bbb, ccc, ddd, eee)
    TAB_GLOBAL (12, aaa1, bbb1, ccc1, ddd1, eee1)
    TAB_GLOBAL (25, aaa2, bbb2, ccc2, ddd2, eee2)
    TAB_GLOBAL (44, aaa3, bbb3, ccc3, ddd3, eee3)
    TAB_GLOBAL (62, aaa4, bbb4, ccc4, ddd4, eee4)



    TAB_EX1(9, aaa1, bbb1, ccc1, ddd1, eee1) ** même val sur TAB_GLOBAL SEQ > SEQ1 on prend
    TAB_EX1(10, da, fb, vc, vd, df)
    TAB_EX2(12, aaa, bbb, ccc, ddd, eee) ** même val sur TAB_GLOBAL SEQ< SEQ1 on prend pas

    TAB_EX2(10, dz, sd, ds, ds, cd)
    TAB_EX2(10, aaa1, bbb1, ccc1, ddd1, eee1) ** même val sur TAB_GLOBAL SEQ > SEQ2 on prend
    TAB_EX2(10, aaa4, bbb4, ccc4, ddd4, eee4) ** même val sur TAB_GLOBAL SEQ > SEQ2on prend

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 226
    Par défaut
    Donc, quand tu dis même val entre tab_global et table_ex1, ça veut dire : mêmes valeurs dans les colonnes A B C D et E

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select * from tab_global tg
    where ( 
              exists ( select 1 from tab_ex1 t1 where t1.a=tg.a and t1.b=tg.b and t1.c=tg.c and t1.d=tg.d and t1.e=tg.e  and t1.seq<tg.seq )
          or exists ( select 1 from tab_ex2 t2 where t2.a=tg.a and t2.b=tg.b and t2.c=tg.c and t2.d=tg.d and t2.e=tg.e  and t2.seq<tg.seq ) 
              )
    select * from tab_global tg ... sans autre table avant le where : donc on lit séquentiellement tab_global, chaque ligne est lue une fois et apparaîtra au max une fois. Et les tests à base de 'EXISTS' permettent de vérifier s'il existe dans une table 'externe' une ligne avec les bonnes valeurs.

  7. #7
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    je te remercie infiniment, ta requête marche à merveille, elle ramène le même résultat que la mienne mais la tienne est plus optimale.

    merci.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/10/2011, 22h59
  2. Réponses: 4
    Dernier message: 13/07/2011, 14h46
  3. Réponses: 5
    Dernier message: 23/12/2010, 20h12
  4. Réponses: 2
    Dernier message: 23/12/2010, 18h35
  5. Afficher les enregistrements de deux tables a la suite
    Par Bib1dum dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/01/2009, 23h02

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