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 :

Like + jointure => marche pas


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 155
    Points : 77
    Points
    77
    Par défaut Like + jointure => marche pas
    Bonjour, j'ai un problème avec une requete toute bête mais je comprends pas pourquoi ça marche pas.

    Quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from rep_mots_cles where upper(mots) like '%ARCHI%';
    J'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    MOTS                          NUMERO
    ----------------------   ----------
    Architecture                 5
     
    Architecture militaire      6
     
    Architecture religieuse    7
     
    Archives                      8
    Donc ça c'est normal

    si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select * from rep_mots_cles, any_mots
    where ENSEMBLE=NUMERO;
    j'obtiens la jointure donc c'est normal. (et il y a bien des mots avec archi dedans)

    Par contre si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * from rep_mots_cles, any_mots
    where ENSEMBLE=NUMERO 
    and upper(mots) like '%ARCHI%';
    alors le resultset est vide. Je comprends vraiment pas pourquoi le fait de mettre un and entre les 2 conditions me renvoie aucun résultats alors que chacun renvoie des résultats.

    Si quelqu'un connait le pb...

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Il ne faudrait pas que tu fasses une jointure droite / gauche plutôt ?
    D'après ce que tu décris, aucune ligne de rep_mots_cles qui satisfait cette condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    upper(mots) like '%ARCHI%'
    n'a de ligne connexe dans any_mots

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    Merci pour ta réponse.

    En fait je vois pas du tout comment faire ça. Je suis avec oracle 7.4 et j'essaie de faire un left outer join mais il me met 'ORA-00933: SQL command not properly ended' sur le outer.
    En gros il a pas l'air de connaitre ce mot. Comment je peux faire?
    En gros voilà ce que je veux ecrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select * 
    from rep_mots_cles left outer join any_mots
    on ENSEMBLE=NUMERO
    where upper(mots) like '%ARCHI%';

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Les mots clés que tu veux utiliser n'existent qu'à partir de la version 9i ou ultérieur.

    L'équivalent (en 8i) réside dans le symbole (+)
    Une recherche avancée te montrera comme l'utiliser (ce n'est pas si compliqué)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    en fait je trouve rien expliquant correctement comment utiliser cette façon de l'écrire. J'ai essayé de l'utiliser sur ma requête mais le resultat est toujours vide.
    Il est fortement possible que la requête ne soit pas correcte. Donc si tu as des liens vers de la doc pour les jointures externes avec cette écriture je veux bien. Sinon si tu vois une solution pour ma requête je suis prenneur.

    Merci

  6. #6
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Il faudrait être plus précis :
    1) tu as pas de ligne car les lignes de la tables rep_mots_cles correspondant à '%ARCHI%' n'ont pas de lien avec la table any_mots

    tu peux le vérifer avec la requêtes suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select *from any_mots where ENSEMBLE in(5,6,7,8)
    Ensuite si tu veux le résultat suivant :
    Selection des mots clés avec ARCHI + toutes les coorespondances de l'ensemble avec la tables any_mots tu as bon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select a.* 
    from rep_mots_cles r, any_mots a
    on a.ENSEMBLE=r.NUMERO
    where upper(r.mots) like '%ARCHI%';
    Dis nous exactement ce que tu souhaites, le libéllé en francais et des extraits des tables, et le résultats voulu on pourra t'aider avec plaisir !
    Si tu es cool monte nous un exemple que nous pouvons exécuter sur nos base
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    create table ....
    insert into ....
    select ...
    Voilà nous t'attendons

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    ok merci de ta réponse.

    1) tu as pas de ligne car les lignes de la tables rep_mots_cles correspondant à '%ARCHI%' n'ont pas de lien avec la table any_mots
    tu as entièrement raison. J'ai essayé avec un autre mot et là j'ai une correspondance.


    Je vais vous donner quand même un exemple. En fait je cherche les mots clés qui comporte la sous-chaine 'ARCHI' par exemple.

    Voila un extrait de table rep_mot_clé :
    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
     
    MOTS                          NUMERO
    ----------------------   ----------
    Affaire Dreyfus              1
     
    Agriculture                   2
     
    Alimentation, alcoolisme  3
     
    Amour, sexualite, illegitimite         4
     
    Architecture                 5
     
    Architecture militaire      6
     
    Architecture religieuse    7
     
    Archives                      8
     
    Archeologie                  9
    et voici la table any_mots (avec seulement les liens vers les mots ci-dessus)
    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
     
    ENSEMBLE    ELEMENT
    ---------- ----------
            91          8
             2        146
             2         44
             2         51
             2         70
             2        121
             2        134
            78          6
           123          1
           127          4
           144          3
           148          8
             2        152
            43          5
            15          7
    Voila comment ça marche (c'est pas moi qui l'ai fait ^^) :
    Prenons par exemple Archives qui a pour numéro 8.
    Celui-ci est référencé dans la table any_mots (1ere ligne) et dans la colonne element. Ce qui veut dire que Archives est un sous-ensemble du mot clé ayant pour numero 91.
    Inversement, Agriculture a pour numéro 2. Il est référencé dans la colonne ensemble. Ca veut dire qu'il a pour sous-ensemble plusieurs autres mots-clés.
    Donc ça ça va ya pas de souci.

    Maintenant ce que je veux faire :
    Je veux tous les mots comportant la chaine '%ARCHI%' et étant un ensemble.
    De même avec une autre requête pour avoir les sous-ensembles.

    En gros je fais une recherche d'abord sur les ensembles et sur les sous-ensembles.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    Je vous rajoute un exemple de ce que je veux obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Art religieux  	 	 	
                Architecture religieuse
    Culture savante  	 	 	
                Architecture
    Histoire militaire
                Architecture militaire
    Lieux de la recherche  	 	 	
                Archives
    Sources de la recherche  	 	 	
                Archives
    Comme vous le voyez il me faut les mots-clés comportant la chaîne 'ARCHI' mais aussi leur sur-ensemble quand le mot trouvé est un sous-ensemble

  9. #9
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Ok regarde l'exemple mais je suis pas sur d'avoir tout compris

    Sinon bon week end @
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    SQL>select * from any_mots;
     
      ENSEMBLE    ELEMENT
    ---------- ----------
             7         71
             7         72
             7         73
     
    Ecoulé : 00 :00 :00.00
    SQL>
    SQL>select * from rep_mot_cle ;
     
    MOTS                                                   NUMERO
    -------------------------------------------------- ----------
    Architecture religieuse                                     7
    Architecture religieuse 1                                  71
    Architecture religieuse 2                                  72
    Architecture religieuse 3                                  73
     
    Ecoulé : 00 :00 :00.00
    SQL>
    SQL>select rmc.* , am.*, rmc1.*
      2  from any_mots am, rep_mot_cle rmc, rep_mot_cle rmc1
      3  where rmc.numero = am.ensemble
      4  and am.element = rmc1.numero
      5  and upper(rmc.mots) like '%ARCHI%' ;
     
    MOTS                                                   NUMERO   ENSEMBLE    ELEMENT
    -------------------------------------------------- ---------- ---------- ----------
    MOTS                                                   NUMERO
    -------------------------------------------------- ----------
    Architecture religieuse                                     7          7         71
    Architecture religieuse 1                                  71
     
    Architecture religieuse                                     7          7         72
    Architecture religieuse 2                                  72
     
    Architecture religieuse                                     7          7         73
    Architecture religieuse 3                                  73
     
     
    Ecoulé : 00 :00 :00.00
    SQL>
    SQL>SELECT numero,mots, element, LEVEL
      2     FROM (select rmc.numero, rmc.mots , am.ensemble, am.element from any_mots am, rep_mot_cle rmc where rmc.numero = am.ensemble and upper(rmc.mots) like '%ARCHI%')
      3     CONNECT BY PRIOR numero=element
      4     ORDER SIBLINGS BY numero;
     
        NUMERO MOTS                                                  ELEMENT      LEVEL
    ---------- -------------------------------------------------- ---------- ----------
             7 Architecture religieuse                                    71          1
             7 Architecture religieuse                                    72          1
             7 Architecture religieuse                                    73          1
     
    Ecoulé : 00 :00 :00.00
    SQL>spool off;

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Choupinou
    Voila un extrait de table rep_mot_clé :
    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
     
    MOTS                          NUMERO
    ----------------------   ----------
    Affaire Dreyfus              1
     
    Agriculture                   2
     
    Alimentation, alcoolisme  3
     
    Amour, sexualite, illegitimite         4
     
    Architecture                 5
     
    Architecture militaire      6
     
    Architecture religieuse    7
     
    Archives                      8
     
    Archeologie                  9
    et voici la table any_mots (avec seulement les liens vers les mots ci-dessus)
    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
     
    ENSEMBLE    ELEMENT
    ---------- ----------
            91          8
             2        146
             2         44
             2         51
             2         70
             2        121
             2        134
            78          6
           123          1
           127          4
           144          3
           148          8
             2        152
            43          5
            15          7

    Code :

    select * from rep_mots_cles, any_mots where ENSEMBLE=NUMERO and upper(mots) like '%ARCHI%';

    A partir des données que tu nous fourni et de la requête que tu désire lancer, le résultat ne peut que être vide.
    Pour obtenir un résultat, il faudrait lancer la requête suivante :

    select * from rep_mots_cles, any_mots where ELEMENT=NUMERO and upper(mots) like '%ARCHI%';

    Il faut remplacer ensemble par element

    Pour obtenir :
    MOTS NUMERO
    ---------------------- ----------
    Architecture militaire 6

    Archives 8

    Archives 8

    ENSEMBLE ELEMENT
    ---------- ----------
    91 8
    78 6
    148 8

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    j'ai résolu mon problème. J'ai préféré utiliser php plutot que plein de requetes dans tous les sens pour régler mon problème. Maintenant ça marche niquel. Merci à tous

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

Discussions similaires

  1. Requete avec jointure qui marche pas
    Par gloubi dans le forum Langage SQL
    Réponses: 13
    Dernier message: 14/02/2008, 16h25
  2. [Mysql 5.0.22] Probleme jointure externe; ne marche pas ?
    Par Floweract dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/11/2006, 12h17
  3. [MySQL] LIKE qui ne marche pas
    Par H-bil dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 29/05/2006, 13h48
  4. [SQL] Jointure,Group BY et ORDER BY COUNT qui marche pas
    Par Stef784ever dans le forum Langage SQL
    Réponses: 8
    Dernier message: 17/08/2005, 12h28
  5. requete(jointure 2 tables) qui marche pas
    Par DaxTaz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2004, 17h50

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