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 :

[MySQL] probleme avec un LEFT JOIN qui retourne plusieur resultat


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 89
    Points : 89
    Points
    89
    Par défaut [MySQL] probleme avec un LEFT JOIN qui retourne plusieur resultat
    je fais un left join de plusieurs table , mais mon probleme est que je veux seulement un résultat d'une table.

    Dans l'exemple suivant ma requete me retourne 2 ligne du meme utilisateur si j'ai 2 siteI associer a se clients...

    Y'a t'il moyen que mon left join me retourne seulement une ligne meme s'il y a 50 siteInternet qui correspond a mes condition?



    SELECT *

    FROM people
    LEFT JOIN customer customer
    ON (customer.customer_id = people.customer_id
    AND customer.is_available = 1)

    LEFT JOIN email email
    ON (email.owner_id = people.people_id
    AND email.owner_type 'people'
    AND email.address LIKE '%@%.%'
    AND email.is_primary = 1
    AND email.is_available = 1)

    LEFT JOIN email siteI
    ON (email.owner_id = people.people_id AND email.owner_type = 'people'
    AND email.type_list_id = 'kEmailType_Web'
    AND email.is_available = 1)

    ..... le reste de la requete
    Anack Shol Kree Shel

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Merci de penser aux balises CODE et à l'indentation des requêtes

    Avec un EXISTS, qui retournera Vrai ou Faux, donc 0 ou 1 ligne :

    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
     SELECT *
       FROM people LEFT JOIN customer customer
                        ON (customer.customer_id = people.customer_id
                        AND customer.is_available = 1)
                   LEFT JOIN email email
                        ON (email.owner_id = people.people_id
                        AND email.owner_type = 'people'
                        AND email.address LIKE '%@%.%'
                        AND email.is_primary = 1
                        AND email.is_available = 1)
    AND EXISTS (SELECT owner_id
                  FROM email siteI
                 WHERE email.owner_id = people.people_id 
                   AND email.owner_type = 'people'
                   AND email.type_list_id = 'kEmailType_Web'
                   AND email.is_available = 1)
    Edit : il manquait un "égal" dans la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    email.owner_type = 'people'
    "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

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 89
    Points : 89
    Points
    89
    Par défaut
    Le probleme c'est que j'ai besoin de s'avoir une address.

    La facon dont lapplication est monter c'est impssible de retraiter la resultat de la requête , ni d'en faire une 2ieme.

    donc je doit me sortir seulement une ligne par email user
    Anack Shol Kree Shel

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par grimsk
    Le probleme c'est que j'ai besoin de s'avoir une address.
    Laquelle ? La première qui vient ?

    Citation Envoyé par grimsk
    La facon dont lapplication est monter c'est impssible de retraiter la resultat de la requête , ni d'en faire une 2ieme.
    Hum ... Quel SGBD ? Un "TOP 1" ou un "LIMIT 1" ne te conviendrait pas ?
    "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

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 89
    Points : 89
    Points
    89
    Par défaut
    J'utilise MySQL et top 1 me sors seulement une ligne

    Moi jai besoin de tous les usager .. mais aucun qui revienne 2 fois
    jai essayer avec SELECT DISTINCT mais il veut rien comprendre se SQL
    Anack Shol Kree Shel

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    DISTINCT s'applique à l'ensemnble des champs du SELECT, normal que cela ne change rien au résultat de ta requête. cf ce post :
    http://www.developpez.net/forums/sho...d.php?t=143840

    Merci de nous donner la structure de ta table email pour que l'on puisse te proposer une solution.

    Tu n'a pas non plus répondu à ma question :
    Citation Envoyé par Xo
    Citation Envoyé par grimsk
    Le probleme c'est que j'ai besoin de s'avoir une address.
    Laquelle ? La première qui vient ?
    "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 expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    ttttttttttt, SQL ne comprend que ce qu'on lui demande de faire. Si tu lui demandes un truc faux, il va te pondre un truc faux !

    Tu veux toutes les données de tes tables ou seulement une partie ?
    Parce qu'un SELECT DISTINCT * c'est sur que c'est pas l'ideal

    Comme indiqué dans les regles, propose nous tes scripts de creation de tables, un jeu d'essai (insert en SQL) et le resultat que tu veux obtenir.

    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Tiens, cf un lien qui devrait t'éclairer, la provblématique est la même que la tienne.
    http://www.developpez.net/forums/sho...d.php?p=934388

    Solution : une fonction d'aggrégation "arbitraire" ...
    "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

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 89
    Points : 89
    Points
    89
    Par défaut
    bon jai trouver

    en gros jai faite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT PEOPLE.PEOPLE_ID , etc ,etc ,etc
    FROM PEOPLE
    LEFT JOIN maFameuseTable ON ( blablaMesCondition )
    GROUP BY PEOPLE.PEOPLE_ID
    ...

    en gros mon probleme c'était que mon select distinct me sortais plusieur fois le meme people_id... sa prennais un group by
    Anack Shol Kree Shel

Discussions similaires

  1. LEFT JOIN qui retourne des valeurs NULL et non NULL
    Par devman2011 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 29/08/2012, 18h05
  2. Delete avec sous requetes qui retourne plusieurs resultats
    Par Biosox dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/07/2010, 14h55
  3. Probleme avec mon LEFT JOIN
    Par arnogb69 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/08/2008, 13h20
  4. COUNT avec LEFT JOIN qui renvoie toujours 1
    Par Christophe_ dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/06/2007, 14h20
  5. [Mysql 3.23] Probleme avec un LEFT JOIN
    Par griese dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/01/2007, 10h16

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