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

SQL Oracle Discussion :

probleme requete pour tout afficher


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Par défaut probleme requete pour tout afficher
    Bonjour,

    J'ai une table A qui contient les valeur suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    key value type
    1     X2    E
    2     X3    D
    3     X4    D
    et une table B qui contient des valeurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Value
    X2
    X6
    V32
    V45
    ce que je souhaiterai c'est avoir au final par exemple pour la clé 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    1     X2    E  OK
    1     X6    null NOK 
    1     V32   null NOK
    1     V45   null NOK
    en faite si la valeur est presente dans la table B, je met OK
    et si elle n'est pas presente je ne met pas NOK

    j'ai essayer avec une jointure externe , mais le truc
    c est que ça me ramene toutes les lignes de la tables A simplement et pas celle de la table B;
    Pour la key = 1,
    j'aurai :
    Merci de votre aide

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    A priori, vous voulez croiser toutes les lignes de chaque table. Attention, si vos tables sont grosses, cela peut prendre un certain temps.

    Un simple DECODE comparant les valeurs suffit (j'ai mis X6 dans la table A pour bien voir le résultat):
    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
      WITH ta AS
           (SELECT 1 AS KEY, 'X2' AS VALUE, 'E' AS TYPE FROM DUAL UNION ALL
            SELECT 2,        'X6',          'D'         FROM DUAL UNION ALL
            SELECT 3,        'X4',          'D'         FROM DUAL),
           tb AS
           (SELECT 'X2' AS VALUE FROM DUAL UNION ALL
            SELECT 'X6'          FROM DUAL UNION ALL
            SELECT 'V32'         FROM DUAL UNION ALL
            SELECT 'V45'         FROM DUAL)
      SELECT ta.key, tb.value, ta.type, DECODE (ta.value, tb.value, 'OK', 'NOK')
        FROM ta, tb;
     
       KEY VAL T DEC
    ------ --- - ---
         1 X2  E OK
         1 X6  E NOK
         1 V32 E NOK
         1 V45 E NOK
         2 X2  D NOK
         2 X6  D OK
         2 V32 D NOK
         2 V45 D NOK
         3 X2  D NOK
         3 X6  D NOK
         3 V32 D NOK
         3 V45 D NOK

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Par défaut
    je ne comprends pas trop ton exemple,
    j'ai mis des valeurs a titre d exemple, les valeurs je ne suis pas censé les connaitre,mettre des valeurs en dure, ce n'est pas possible;
    avec le decode ,on sait si on met OK ou NOK
    mais le problème c'est comment pour la Key 1, je peux ramener toutes les valeurs de la table B.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Un minimum de réflexion est indispensable...

    Mes données en dur sont là pour montrer le résultat attendu.
    Pour la Key 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ta.KEY, tb.value, ta.type, DECODE (ta.value, tb.value, 'OK', 'NOK')
        FROM ta, tb
     WHERE ta.KEY = 1;

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Par défaut
    en faite tu fais un produit cartesien
    j'avais pensé à cela aussi
    mais le truc
    est que si j'ai 200 000 lignes dans ma tables A
    et 50 dans la table B
    ça risque de mettre une decennie.

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Citation Envoyé par donny Voir le message
    en faite tu fais un produit cartesien
    j'avais pensé à cela aussi
    mais le truc
    est que si j'ai 200 000 lignes dans ma tables A
    et 50 dans la table B
    ça risque de mettre une decennie.
    Si de toute façon tu dois comparer avec chaque ligne, tu n'as pas vraiment le choix...

    Une autre façon d'écrire est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT ta.KEY, tb.VALUE, ta.TYPE, 'OK'
      FROM ta, tb
     WHERE ta.KEY = 1 AND ta.VALUE = tb.VALUE
    UNION ALL
    SELECT ta.KEY, tb.VALUE, ta.TYPE, 'NOK'
      FROM ta, tb
     WHERE ta.KEY = 1 AND ta.VALUE <> tb.VALUE;
    Pas sûr que ça change grand chose au niveau des perfs. Il te faut un index sur les colonnes VALUE.

Discussions similaires

  1. [AC-2010] Paramètre pour tout afficher
    Par cyr.odi dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 21/03/2012, 14h48
  2. Réponses: 5
    Dernier message: 17/10/2008, 09h33
  3. Probleme requete pour lister les banques de boites aux lettres
    Par spykopat dans le forum Exchange Server
    Réponses: 1
    Dernier message: 20/08/2007, 11h56
  4. [WebForms]Afficher toujours le même URL pour toutes mes pages
    Par Irish dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 15/12/2006, 14h44
  5. Probleme de requete pour remplir les champs d'une table
    Par Jim_Nastiq dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/04/2006, 14h56

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