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 :

requete sql?


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut requete sql?
    bonjour je n'arrive pas a resoudre une requete sql qui doit etre pourtant tres simple!

    +---------+
    | tab1 |
    +--------+
    | id_tab |
    +-------+


    +--------+
    | tab2 |
    +--------+
    | id_tab1 |
    | valleur |
    +--------+

    avec id_tab1 qui est une foreign key sur id_tab de tab1



    voila j'ai ces 2 tables et je voudrais sortir les couples
    id_tab/valleur pour lesquels il n'existe pas les couples

    id_tab/1
    id_tab/2
    id_tab/3
    id_tab/4

    merci pour votre aide!

  2. #2
    C_C
    C_C est déconnecté
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 139
    Par défaut
    je voudrais sortir les couples
    id_tab/valleur pour lesquels il n'existe pas les couples
    pas compris cette partie...

  3. #3
    Membre expérimenté Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM TAB2
    RIGHT EXCEPTION JOIN TAB1 ON ID_TAB1=ID_TAB
    Encore là, la solution peut varier selon ton SGBD.
    Mais le sachant pas?

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    je vais essaye de faire voir un exemple

    liste des valeurs dans table 1 pour id_tab:
    1, 2, 3, 5

    liste des couple de valeur dans la table 2 pour (id_tab1, valeur)
    (1,1) (1,2) (1,6), (1,7)
    (2,3) (2,4)
    (5,1) (5,2) (5,3) (5,4)

    je voudrai comme resultat
    le couple manquant pour les valeurs 1,2,3,4
    ce qui donnerais :
    (1,3) (1,4)
    (2,1) (2,2)
    (3,1) (3,2) (3,3) (3,4)

    et ma base de donnee est une base oracle

    et l'exception join marche pas

  5. #5
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 57
    Par défaut
    Je pense qu'il va te falloir créer une table de référence dans laquelle tu as tous les éléments possibles, puis faire un MINUS entre les deux tables.

  6. #6
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Citation Envoyé par omistler
    et ma base de donnee est une base oracle
    et l'exception join marche pas
    Merci de préciser les versions de SGBD également SVP.

    En particulier, Oracle n'accepte les JOIN qu'à partir de la 9i
    (cf http://sql.developpez.com/sqlaz/jointures/#L6)

    Citation Envoyé par omistler
    je voudrai comme resultat
    le couple manquant pour les valeurs 1,2,3,4
    ce qui donnerais :
    (1,3) (1,4)
    (2,1) (2,2)
    (3,1) (3,2) (3,3) (3,4)
    Et ces valeurs (1, 2, 3, 4) sont-elles gérées dans une table de la BDD ? Ce serait plus facile dans ce cas ...

    [Edit] grillé [/Edit]
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  7. #7
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 57
    Par défaut
    et toc!

  8. #8
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    non, elles ne sont pas dans la bd...
    et je ne peu pas ajouté un table comme ca dans ma BD
    j'ai essayé avec une table temporaire... mais comme je suis en code pl/sql j'ai des probleme avec le code dynamique.

    alors j'aimerais bien que se soint résolu sans table!

    j'ai trouvé une solution en pl/sql, mais je la trouve beaucoup trop compliquée et en plus je ne peu pas trier les valeurs

  9. #9
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    oracle 9i

  10. #10
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 57
    Par défaut
    Tu as toujours moyen de le faire dans le code alors :

    Tu crées un tableau à deux dimensions 4*4 initialisé à 0. Tu mets des 1 là ou tu trouves des résultats => tu récupères les données manquantes en regardant les 0...

  11. #11
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    je peux mettre ce que j'ai fait en pl

    vous pouvez me dire ce que vous en pensaient
    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
     
    PROCEDURE verif_etat_logique is
     
       i integer;
       type typ_array is varray(11) of integer;
     
       --tableau des etat logiques a verifier
       t_list_value typ_array:=typ_array(1,2,3,4);
     
       -- curseur cherchant si le dossier carrefour possede l'etat logique passé en parametre
       cursor cur_elo(p_valeur VARCHAR2) is
       select t1.id_tab, p_valeur as valeur
       from tab1
       where not exists (
          select 'est la'
          from tab2 t2
          where t1.id_tab=t2.id_tab1 
          and   p_valeur=t2.valeur
       )
    begin
     
       -- boucle sur la liste des etats logiques
       for i in t_list_value.first..t_list_value.last loop
          for rec_elo in cur_elo(t_list_value(i)) loop
             dbms_output.put_line(rec_elo.id_tab|| ' / ' || rec_elo.valeur); 
          end loop;
       end loop;
     
    end;

  12. #12
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    j'aurais prefere que se soit tout géré par une requete sql!

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 91
    Par défaut
    Je ne peux pas vérifier, mais est ce que cela peut marcher?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select distinct id,valeur from t1,t2 where id<5 and valeur<5 and (valeur
    NOT IN (select 4) OR valeur NOT IN (select 3) or valeur not in (select 2) or valeur not in (select 1))
     
    MINUS
     
    Select id1,valeur from t2;
    Avec tous les attributs en int.
    Je dis peut etre une betise veuillez m'en excuser...

  14. #14
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    j'comprend pas tout mais ca a l'air de marcher...
    j'essaye de verifier

  15. #15
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Par défaut
    bon ben j'ai compris...
    et ca marche presque!
    tu genere la liste des valeurs possible en faisant une jointure entre les 2 tables considéré
    mais si par exemple la valeur 4 est inexistantes dans la table t2 elle ne sera jamais remontée comme valeur manquante

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 91
    Par défaut
    Bonjour,

    en fait la première requête sert à générer tous les doublons possibles à partir des informations que l'on a dans t1. Donc pour le 4, il suffit que l'on ait 4 dans t1 pour qu'il rajoute les doublons :
    4,4 4,1 4,2 4,3...

    Ensuite, on retire à tous ces doublons ceux déjà contenus dans t2.

Discussions similaires

  1. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31
  2. Prob de requete sql et variable
    Par agent-zaizai dans le forum ASP
    Réponses: 11
    Dernier message: 21/10/2003, 16h54
  3. requete sql
    Par autumn319 dans le forum ASP
    Réponses: 22
    Dernier message: 10/09/2003, 16h46
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

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