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

Oracle Discussion :

Petite question sur requête


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Août 2015
    Messages : 14
    Par défaut Petite question sur requête
    J'ai la requête suivante que je souhaite modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select colonne1, colonne2        
    from Table1     
    WHERE   
        colonne1 = 'A'                                       
    and  colonne2  >  xxxxxx
           colonne2   <   yyyyyy             
    GROUP BY                         
       colonne1, colonne2
    ORDER By 
      colonne1, colonne2
    Je souhaite faire une jointure entre table1 et table2 pour que la condition colonne2 > xxxxx et < yyyyy soit vrai pour la table1 et table2 (sachant que colonne2 est présent dans table1 et table2)
    Est ce que si j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    select a.colonne1, a.colonne2        
    from Table1 a, table2 b    
    WHERE   
    a.colonne1 = b.colonne1                                
    and  a.colonne2   <   yyyyyy
    and a.colonne2 > xxxxx
    and b.colonne2 > xxxxx
    and b.colonne2 < yyyyy
    GROUP BY                         
       a.colonne1, a.colonne2
    ORDER By 
      a.colonne1, a.colonne2
    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 135
    Par défaut
    Depuis des lustres les jointures s'expriment avec JOIN...
    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
    SELECT  a.colonne1
        ,   a.colonne2        
    FROM    table1  a
        INNER JOIN
            table2  b    
            ON  a.colonne1  = b.colonne1
    WHERE   a.colonne2  < yyyyyy
        AND a.colonne2  > xxxxx
        AND b.colonne2  > xxxxx
        AND b.colonne2  < yyyyy
    GROUP BY                         
            a.colonne1
        ,   a.colonne2
    ORDER BY
            a.colonne1
        ,   a.colonne2
    ;
    Comme la table table2 n'entre pas dans les résultats, il faudrait vérifier si l'utilisation de EXISTS n'améliorerait pas les performances...
    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
    SELECT  a.colonne1
        ,   a.colonne2        
    FROM    table1  a
    WHERE   a.colonne2  < yyyyyy
        AND a.colonne2  > xxxxx
        AND EXISTS
            (   SELECT  NULL
                FROM    table2  b
                WHERE   b.colonne2  > xxxxx
                    AND b.colonne2  < yyyyy
                    AND a.colonne1  = b.colonne1
            )
    GROUP BY                         
            a.colonne1
        ,   a.colonne2
    ORDER BY
            a.colonne1
        ,   a.colonne2
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Août 2015
    Messages : 14
    Par défaut J'ai du mal m'exprimer
    J'ai essayé la requête mais le résultat n'est pas exactement ce que je voulais.
    Voila ce que je veux, exemple
    TableA
    Classe / eleve
    A / 001
    A / 003
    A / 009


    TableB
    Classe / élève
    A / 002
    A / 010

    je veux que ma requête me donne la liste des élèves de la table A et B compris entre 001 et 005 pour la classe A
    donc en résultat
    Je veux avoir
    A / 001
    A / 002
    A / 003

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 135
    Par défaut
    Citation Envoyé par cmoiquivala Voir le message
    J'ai du mal m'exprimer (...)
    je veux que ma requête me donne la liste des élèves de la table A et B compris entre 001 et 005 pour la classe A
    En effet, la demande est mal exprimée...
    Si je m'en réfère à ton exemple, tu voudrais les élèves de la classe A compris entre 001 et 005 qui sont dans la table A ou la table B.
    Ce n'est pas du tout la même opération !
    Il faut utiliser une UNION.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Août 2015
    Messages : 14
    Par défaut
    Bonjour Al1_24.
    C'est parfait. C'est effectivement le union qu'il fallait utiliser. Un grand merci à toi fin connaisseur de sql

Discussions similaires

  1. [ATL] Petite question sur les progress bar
    Par MrMaze dans le forum MFC
    Réponses: 1
    Dernier message: 06/05/2005, 09h40
  2. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 12
    Dernier message: 20/01/2005, 14h41
  3. petite question sur le composant IBX ...
    Par vbcasimir dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/01/2005, 10h33
  4. Réponses: 3
    Dernier message: 08/12/2004, 13h58
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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