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 de jointure gauche


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 43
    Points : 31
    Points
    31
    Par défaut Problème de jointure gauche
    Salut

    Voilà la requête que j'aimerai faire:
    select TSUM_SUM_NUM
    , max_num
    , TMVS_UFO_COD
    FROM
    (
    select TSUM_SUM_NUM
    , max (TMVS_SUF_NUM) as max_num
    FROM TMVS
    LEFT JOIN TSUM ON TMVS_VEN_NUM = TSUM_VEN_NUM
    )
    LEFT JOIN TMVS ON TMVS_VEN_NUM = TSUM_VEN_NUM
    GROUP BY TSUM_SUM_NUM
    ORDER BY TSUM_SUM_NUM
    Je suis sous SQL Server 2005 mais il ne veut pas, il me dit que j'ai une erreur sur le LEFT. J'comprends pas pourquoi je ne peux pas faire une jointure sur une sous requête...

    La clé de TMVS est binaire: TMVS_VEN_NUM et TMVS_SUF_NUM
    Moi je veux récupérer les UFO_COD de TMVS correspondant à la valeur maximum de TMVS_SUF_NUM pour un même numéro TMVS_VEN_NUM. J'ai encore une fois dû manquer quelque chose. Je me dépatouille avec le group by comme un manche à balai.

    Voilà, j'veux bien un coup de main. Merci d'avance.

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Ne pourrais tu pas donner la structure de tes tables? Les noms et leurs champs.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FROM
    (
    select TSUM_SUM_NUM
    , max (TMVS_SUF_NUM) as max_num
    FROM TMVS
    LEFT JOIN TSUM ON TMVS_VEN_NUM = TSUM_VEN_NUM
    )
    c'est étrange un FROM SELECT...le SELECT renvoie des noms de tables?

    Ca ne serait pas plutôt un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE .... IN (SELECT...)



    Jasmine,

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Rha j'ai honte...

    Merci Jasmine de ton aide.

  4. #4
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Tiens autre question: comment faire une recherche sur un couple de données ? J'ai vu qu'il y avait des sujets similaires mais ça ne m'aide pas.

    Les structures des tables est la suivante (je donne juste les clés, ce sont des tables à rallonge)
    TOBC
    TOBC_SUM_NUM et TOBC_OBC_NUM comme PK

    TMVS
    TMVS_VEN_NUM et TMVS_SUF_NUM comme PK

    TSUM
    TSUM_SUM_NUM comme PK

    Donc le truc c'est que j'aimerai chercher si le couple (TOBC_SUM_NUM, TOBC_UFO_COD) est bien dans la requête de recherche que Jasmine m'a aidée à corriger. Je ne peux pas chercher séparement chaque champ car ça me mettrait toujours le flag voulu à 1, ce qui n'est pas l'effet recherché. Là, la requête que j'ai mise ne fonctionne, c'est normal mais disons que je voudrais quelque chose du genre pour mon CASE sur le flag.

    Exemple de données que j'ai:
    TOBC_SUM_NUM, TOBC_UFO_COD
    123, 1
    123, 2
    156, 1

    et dans ma requete magique qui apparait dans le premier post, je vais avoir:
    TOBC_SUM_NUM, TOBC_UFO_COD
    123, 2
    156, 1

    Donc Logiquement, le résultat final devrait être:
    TOBC_SUM_NUM, TOBC_UFO_COD, flag
    123, 1, 0
    123, 2, 1
    156, 1, 1

    SELECT typeDiagnostic = CASE
    WHEN ((TSEC_CNS_COD=1) OR (TSEC_CNS_COD=3)) THEN 'Lesionnel'
    WHEN ((TSEC_CNS_COD!=1) AND (TSEC_CNS_COD!=3)) THEN 'Medical'
    ELSE 'Non renseigné'
    END
    , TOBC_OBC_TXT
    , TOBC_SUM_NUM
    , CONVERT(smalldatetime,CONVERT(varchar,TOBC_OBC_DATE,103)) as date
    ,TOBC_UFO_COD
    , flag = CASE
    WHEN ((TOBC_SUM_NUM, TOBC_UFO_COD) IN (SELECT TMVS.TMVS_UFO_COD, TSUM.TSUM_SUM_NUM
    FROM TMVS
    LEFT JOIN TSUM ON TMVS.TMVS_VEN_NUM = TSUM.TSUM_VEN_NUM
    where TMVS.TMVS_SUF_NUM IN
    (SELECT MAX(TMVS_SUF_NUM)
    FROM TMVS T
    WHERE T.TMVS_VEN_NUM=TMVS.TMVS_VEN_NUM
    GROUP BY TMVS.TMVS_SUF_NUM)))THEN '1'
    ELSE '0'
    END

    FROM TOBC
    LEFT JOIN TSUM ON TOBC_SUM_NUM=TSUM_SUM_NUM
    LEFT JOIN TINU ON TINU_INU_COD = TOBC_INU_COD
    LEFT JOIN TSEC ON TSUM_SUM_NUM=TSEC_SUM_NUM
    WHERE TOBC_UFO_COD!=1 AND TINU_INU_TYP IN ('C','R','E','P','I') AND TOBC_DIA_PRI= 1
    ORDER BY date, TOBC_SUM_NUM
    Le but évidemment étant d'arriver à quelque chose d'à peu près propre et que ne rame pas trop. J'ai essayé avec un AND mais ce n'est pas bon. J'ai essayé les {} en me disant, il va piger que c'est un tuple mais à la réflexion ce n'est que du SQL donc, ça ne peut pas être ça.
    Est ce possible par du SQL ou faut il que je passe par autre chose ? (jamais fait de SQL avec des trucs de partout comme ça... à quoi ça sert d'aller à l'école alors si c'est juste pour voir les trucs simples...)

    Vendredi 13 n'est pas un jour pour moi, ni les autres jours d'ailleurs... ^_^ Mais bon, j'vais bien progresser quand même, c'est le but des stages il paraît. Merci pour l'aide apportée, ce forum m'a bien débloquée jusqu'alors en tout cas.

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Est ce que quelqu'un a une idée ?

    Que ce soit pour faire la requête sur le couple ? Ou alors avec une autre solution , même si je dois le faire en plusieurs moi, tanpis. J'aimerai bien boucler ça avant le we

Discussions similaires

  1. Problème de jointure gauche
    Par david71 dans le forum SQL
    Réponses: 1
    Dernier message: 29/07/2010, 21h12
  2. Réponses: 5
    Dernier message: 08/03/2010, 14h30
  3. Problème jointure gauche qui ne passe plus sous MySQL 5
    Par OuiOui007 dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/09/2006, 10h33
  4. Problème de jointure ?!
    Par ebaynaud dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/11/2004, 11h27
  5. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53

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