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 :

Problème Requete Multi Jointure + Like


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 61
    Points
    61
    Par défaut Problème Requete Multi Jointure + Like
    Salut à tous et bonne année

    Alors je place le décors : j'ai 5 tables :

    -patient
    clef primaire PaNum

    -adresse
    clef primaire AdNum
    clef étrangère PaNum référence à patient

    -visite
    clef primaire ViNum
    clef étrangère PaNum référence à patient

    -photo
    clef primaire PhNum
    clef etrangère ViNum référence à visite
    clef etrangère Dicode référence à diagnostic
    PhPath = Nom du fichier image

    -diagnostic
    clef primaire DiCode
    Voila pour les tables, j'aimerais donc faire une requete de sélection de toute les informations (toute les tables) concernant la Photo ayant le nom de fichier REje14M000001 ...
    en toute logique j'ai essayé cette requete en faisant une jointure entre toutes les tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT *
    FROM adresse, diagnostic, patient, photo, visite
    WHERE adresse.PaNum = patient.PaNum
    AND patient.PaNum = visite.PaNum 
    AND visite.Vinum = photo.ViNum
    AND diagnostic.DiCode = photo.DiCode
    AND photo.PhPath like '%REje14M000001%'
    Cependant celle ci ne renvoit rien ...

    Alors qu'une simple jointure + un like :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT *
    FROM photo, visite
    WHERE visite.Vinum = photo.ViNum
    And photo.PhPath like '%REje14M000001%'
    Fonctionne très bien en renvoyant la ligne qui m'interesse cad les information de la visite concerné par la photo ...

    Pourriez vous me donner un petit coup de pouce car cela fait déja 3 heures que je planche dessus

    Merci à vous

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Ben rajoute chaque prédicat un à un quand ca ne marche plus ca veut que la donnée manque sur la table en question.
    Apres 2 possiblités soit c'est pas normal et alors il faut corriger les données soit c'est normal et il faut faire un outer join.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut Re: Problème Requete Multi Jointure + Like
    Citation Envoyé par thefutureisnow
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND patient.PaNum = visite.ViNum
    Ce ne serait pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND patient.PaNum = visite.PaNum
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    ce n'est pas ainsi que l'in fait des jointures et dans votre cas je pense que le fait de ne pas faire de jointures externes sur certaines tables vire la ligne que vous voulez retrouver.

    voici votre requête bien faite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *
    FROM   patient P
           INNER JOIN visite V ON P.PaNum = V.ViNum
                 INNER JOIN photo PH ON V.Vinum = PH.ViNum 
                       LEFT OUTER JOIN diagnostic D ON PH.DiCode = D.DiCode
           LEFT OUTER JOIN adresse A ON P.PaNum = A.PaNum
    WHERE PH.PhPath like '%REje14M000001%'
    Notez que la syntaxe des jointures à base de JOIN date de 1992 soit plus de 20 ans !!!!

    Lisez l'article que j'ai écrit surle sujet : http://sqlpro.developpez.com/cours/sqlaz/jointures/#L2

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre averti Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Points : 433
    Points
    433
    Par défaut
    Notez que la syntaxe des jointures à base de JOIN date de 1992 soit plus de 20 ans !!!!
    euh non ça ne fait que 14 ans

    Tiens j'ai découvert cette syntaxe ce matin à la SQLServer, je bosse sur Oracle j'avais jamais vu des jointures dans le FROM

    EDIT : mais c'est vrai que le temps passe vite

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Merci pour vos réponses, mais rien n'y fait, toujours aucunes ligne ...

    Je crois que le problème vient que la base de donnée à en effet des "trous" ce qui est normal dans mon projet, car je dois détecter justement les "trous" et afficher les problèmes en vus d'un delete ou d'un update par la suite ...

    Donc est ce possible de créer une requete de jointure qui affiche une ligne même partiel ?

    Dans mon exemple, le nom de la photo renvois bien une photo existante, se rapportant bien à une visite, cependant cette visite ne se rapporte à aucun client et donc aucune adresse, et aucun diagnostic... J'aurrais donc aimer que la requete fasse une jointure total mais n'affiche que les données existantes cad ici une ligen contenant les informations de la photo et de la visite...
    Et si il y avait eu un client et une adresse j'aurrais souhaiter que ces informations apparaissent...

    Bref est ce possible au point de vue SQL ?

    Merci d'avance et dsl du dérangement

    P.S c'est vrai que SQL existe depuis 14 ans déja mais visiblement on s'arrache toujours autand les cheveux dessus

  7. #7
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Donc est ce possible de créer une requete de jointure qui affiche une ligne même partiel ?
    C'est justement le principe de la jointure externe. Va voir sur
    http://mhubiche.developpez.com/Access/tutoJointures/

    P.S c'est vrai que SQL existe depuis 14 ans déja mais visiblement on s'arrache toujours autand les cheveux dessus
    Sql exite depuis plus de 14 ans c'est la syntaxe avec JOIN qui est de 92 la syntaxe que tu utilises avec les predicat dans le where elle est plus ancienne.
    C'est ce qui enerve SQLPro c'est de voir des vieux croulants comme nous qui l'utilisons encore.
    Pour ma défense on me l'a appris comme ca et je trouve cette solution plus lisible question d'habitude.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    1) sur les 14 ans : effectivement la norme de 1992 à statué sur les JOIN. mais celle de 1986 indiquait déjà les lacune de la jointure externe et proposait le mot PRESERVE:
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM T1, T2
    WHERE T1.COL1 = T2.COL2
    PRESERVE T
    C'est une jointure externe gauche. (voir Chris DATE)
    La syntaxe JOIN a été proposée juste après publication de la norme de 1986. Je pense en 1986 donc juste 20 ans !

    2) Plus lisible les jointures dans le WHERE ? J'en pisse de rire !
    Voici les deux écritures d'une même requête avec JOIN et sans JOIN.
    Je laisse les lecteurs de ce site décider laquelle est plus lisible et de me dire notamment dans la requête 1 sans voir la 2 quelle est la jointure sur T4 ?

    Requête 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *
    FROM   T1, T2, T3, T4
    WHERE  COL23 = 'U'
    AND    COL51 = COL31
    AND    COL32 = COL73
    AND    COL34 = COL22
    C'est bien évidemment impossible !

    Requête 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
    FROM   T1
           INNER JOIN T2
                 ON COL34= COL22
           INNER JOIN T3
                 ON COL32 = COL73
           INNER JOIN T4
                 ON COL51 = COL31
    WHERE COL23 = 'U'
    3) Access implémente très mal les jointures et notamment les jointures externes avec une obligation de parenthèsage imbriquée particulièrement épouvantable. Ce n'est donc franchement pas une bonne idée que d'indiquer comme modèle de jointure ISO ce que fait access !!!
    Mieux vaut lire la norme SQL, par exemple :
    http://sqlpro.developpez.com/cours/sqlaz/jointures/#L2

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Merci pour ton lien, en suivant ton tuto, ca donne une requete de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT *
    FROM adresse AD, diagnostic DIA, patient PA, photo PH, visite VI
    LEFT JOIN adresse ON (AD.PaNum = PA.PaNum)
    LEFT JOIN  patient ON (PA.PaNum = VI.PaNum)
    LEFT JOIN  visite ON  (VI.Vinum = PH.ViNum)
    LEFT JOIN  Diagnostic ON (DIA.DiCode = PH.DiCode)
    WHERE PH.PhPath like '%REje14M000001%'
    Qui me donne sous MySQL Controle Center, 1000 ligne ... il fait donc une jointure sur toutes les ligns sans tenir compte du where visiblement ...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Oups j'avais pas vu ta réponse SQLPRO

  11. #11
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Citation Envoyé par SQLpro
    2) Plus lisible les jointures dans le WHERE ? J'en pisse de rire !
    Voici les deux écritures d'une même requête avec JOIN et sans JOIN.
    Je laisse les lecteurs de ce site décider laquelle est plus lisible et de me dire notamment dans la requête 1 sans voir la 2 quelle est la jointure sur T4 ?

    Requête 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *
    FROM   T1, T2, T3, T4
    WHERE  COL23 = 'U'
    AND    COL51 = COL31
    AND    COL32 = COL73
    AND    COL34 = COL22
    C'est bien évidemment impossible !

    Requête 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
    FROM   T1
           INNER JOIN T2
                 ON COL34= COL22
           INNER JOIN T3
                 ON COL32 = COL73
           INNER JOIN T4
                 ON COL51 = COL31
    WHERE COL23 = 'U'
    Pour être objectif tu aurais du mettre les prefixs sinon c'est sur que c'est illisible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *
    FROM   T1, T2, T3, T4
    WHERE  T1.COL23 = 'U'
    AND    T2.COL51 = T3.COL31
    AND    T3.COL32 = T4.COL73
    AND    T2.COL34 = T4.COL22
    Je l'ai dis c'est juste une question d'habitude. Je ne dis pas que les autres doivent faire ainsi. Surtout pas.

    Concernant les outer join tout à fait d'accord.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Merci Sql pro pour ton lien, après une petite lecture j'en arrive à faire cette requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT *
    FROM   patient P
           INNER JOIN visite V ON P.PaNum = V.ViNum
                 INNER JOIN photo PH ON V.Vinum = PH.ViNum
                       LEFT OUTER JOIN diagnostic D ON PH.DiCode = D.DiCode
           LEFT OUTER JOIN adresse A ON P.PaNum = A.PaNum
    WHERE PH.PhPath LIKE '%REje14M000001%' 
    OR A.PaNum IS NULL
    OR PH.DiCode IS NULL
    OR  PH.ViNum IS NULL
    OR V.PaNum IS NULL
    ou celle ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT *
    FROM   patient P
           INNER JOIN visite V ON P.PaNum = V.ViNum
                 INNER JOIN photo PH ON V.Vinum = PH.ViNum
                       LEFT OUTER JOIN diagnostic D ON PH.DiCode = D.DiCode
           LEFT OUTER JOIN adresse A ON P.PaNum = A.PaNum
    WHERE PH.PhPath LIKE '%REje14M000001%' 
    OR A.AdNum IS NULL
    OR P.PaNum IS NULL
    OR V.ViNum IS NULL
    OR PH.PhNum IS NULL
    OR D.DiCode IS NULL
    qui ne donnent guère plus de résultats ... je m'y prend vraiment mal on dirait

  13. #13
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    L'autre remarque vaut toujours, supprime des prédicats jusqu'a obtenir quelque chose. Et vérifie sur tes tables ou se trouve les contraintes d'integrité peut être en as tu oublié une.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Merci mais parmis les requetes que j'ai testé quel est selon vous celle qui est la plus juste dans ce que je recherche

  15. #15
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Supprime tous les OR...

    Es tu sûr de ta condition WHERE PH.PhPath LIKE '%REje14M000001%'
    n'y a t-il pas là un problème de collation ?

    Sinon, retire les tables une à une de la jointure pour voir à quel oment apparaissent les données que tu veut.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    si je supprime tous les OR, je n'ai aucunes ligne en résultat...
    Et au niveau du PhPath c'est bien ca, et ca devrait marché

  17. #17
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM   patient P
    WHERE PH.PhPath LIKE '%REje14M000001%'
    Est ce que cela te renvoi quelue chose ?
    Si oui alors rajoute les JOIN 1 à 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
           INNER JOIN visite V ON P.PaNum = V.ViNum
                 INNER JOIN photo PH ON V.Vinum = PH.ViNum
                       LEFT OUTER JOIN diagnostic D ON PH.DiCode = D.DiCode
           LEFT OUTER JOIN adresse A ON P.PaNum = A.PaNum
    Puis dis nous quand tu ne recois plus rien.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM  photo
    WHERE photo.PhPath LIKE '%REje14M000001%'
    celle ci renvoi bien une ligne ...



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM  photo, patient INNER JOIN visite ON patient.PaNum = visite.ViNum
    WHERE photo.PhPath LIKE '%REje14M000001%'
    Celle ci renvoi 21 lignes ...



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT *
    FROM patient
    INNER JOIN visite ON patient.PaNum = visite.ViNum
    INNER JOIN photo ON visite.Vinum = photo.ViNum 
    WHERE photo.PhPath LIKE '%REje14M000001%'
    Celle ci ne renvoi rien helas


    Je commence à être completmeent paumé

  19. #19
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Ta requête 2 (celle qui renvoie 21 lignes) est mauvaise !

    Elle fait un produit cartésien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM  photo, patient 
          INNER JOIN visite 
                ON patient.PaNum = visite.ViNum
    WHERE photo.PhPath LIKE '%REje14M000001%'
    Tu place deux tables dans la première ligne de la clause FROM :
    cela provoque donc un produit cartésien.

    Il ne doit y avoir qu'une seule table qui figure après le FROM.
    Ensuite, chaque nouvelle table doit être introduite par une caluse JOIN.

    Reprend donc proprement tes requêtes et reposte le résultat.

    STP apprend les jointures. Je pense que les article que j'ai écrit à ce sujet sont assez clairs !
    http://sqlpro.developpez.com/cours/sqlaz/jointures/
    Sinon il y a mes deux bouquins sur SQL avec des centaines d'exemples.
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Ok pour les précisions

    Alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM  patient P
    INNER JOIN visite V ON P.PaNum = V.ViNum
    INNER JOIN photo PH ON V.Vinum = PH.ViNum 
    WHERE PH.PhPath LIKE '%REje14M000001%'

    Me semble correct mais renvoi aucunes lignes

    Idem pour celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT *
    FROM  patient P
    INNER JOIN visite V ON P.PaNum = V.ViNum
    INNER JOIN photo PH ON V.Vinum = PH.ViNum 
    LEFT OUTER JOIN diagnostic D ON PH.DiCode = D.DiCode
    LEFT OUTER JOIN adresse A ON P.PaNum = A.PaNum
    WHERE PH.PhPath LIKE '%REje14M000001%'
    SqlPro tes livres m'interesseraient dans un future proche mais helas je dois finir cela assez rapidement ... je sais que je suis pas très fort en Sql et j'en aurrais bien besoin, mais là je dois faire avec les moyens du bord [/code]

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. REQUETE multi jointure
    Par olive_olive dans le forum Langage SQL
    Réponses: 8
    Dernier message: 14/02/2011, 23h43
  2. Requete Multi jointure lourde, besoin d'optimisation
    Par Kijer dans le forum Requêtes
    Réponses: 13
    Dernier message: 22/10/2007, 16h43
  3. Réponses: 12
    Dernier message: 23/05/2007, 10h37
  4. Problème Requete Multi Jointure + Like
    Par thefutureisnow dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/01/2006, 19h39
  5. Problème de requete multis-selections
    Par tripper.dim dans le forum SQL
    Réponses: 9
    Dernier message: 03/09/2003, 13h08

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