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

Requêtes MySQL Discussion :

un seul enregistrement retourné sur Left Join ?


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut un seul enregistrement retourné sur Left Join ?
    Bonjour,

    Je débute en sql et galère sur une requête.

    Voici mon problème :
    Je souhaite obtenir la liste des clients abonnés à la newsletter avec (si elle existe) la date de leur dernière commande.

    J'utilise LEFT JOIN mais évidemment, j'obtiens toutes les commandes des clients. Je ne souhaite qu'un seul enregistrement par client.

    la requête :

    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
    SELECT 
    	Client.IDClient AS IDClient,	
    	Client.civilite AS civilite,	
    	Client.nom AS nom,	
    	Client.prenom AS prenom,	
    	Client.mail AS mail,	
    	Commande.date_comm AS date_comm
    FROM 
    	Client
    	LEFT OUTER JOIN
    	Commande
    	ON Client.IDClient = Commande.IDClient
    WHERE 
    	(
    	Client.Newsletter = 1
    	AND	Client.mail <> ''
    )
    Merci pour votre aide

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Il suffit d'utiliser MAX, non ?
    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 Client.IDClient AS IDClient,	
           Client.civilite AS civilite,	
           Client.nom AS nom,	
           Client.prenom AS prenom,	
           Client.mail AS mail,	
           max(Commande.date_comm) AS date_comm
      FROM Client
      LEFT OUTER JOIN Commande
        ON Client.IDClient = Commande.IDClient
     WHERE Client.Newsletter = 1
       AND Client.mail <> ''
     group by Client.IDClient AS IDClient,	
              Client.civilite AS civilite,	
              Client.nom AS nom,	
              Client.prenom AS prenom,	
              Client.mail AS mail
    Bon ça m'est totalement contre nature mais en cas de problème de perf regarde :
    Démythifier le GROUP BY
    Evidemment ça n'est envisageable QUE parceque le regroupement intègre l'iDClient et QUE des colonnes de la table client !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    excellent ça fonctionne ! Un grand merci à toi.
    J'ai encore beaucoup de progrès à faire...

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

Discussions similaires

  1. Count sur Left join
    Par olibara dans le forum Langage SQL
    Réponses: 8
    Dernier message: 14/04/2010, 21h55
  2. LEFT JOIN sur sous requete
    Par passie dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/06/2006, 12h51
  3. Réponses: 8
    Dernier message: 11/05/2006, 23h18
  4. left join multiple sur grosses tables
    Par hn2k5 dans le forum Requêtes
    Réponses: 6
    Dernier message: 30/11/2005, 16h10
  5. ROLLBACK sur une seul enregistrement
    Par toctoc80 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/04/2004, 20h22

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