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 :

Sélection multi table avec condition


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    iuz
    iuz est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Par défaut Sélection multi table avec condition
    Salut,

    c'est ma première question SQL, car c'est un langage que j'utilise très peu (juste SELECT ... FROM ... WHERE ...) alors me voilà un peu coincé par cette requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT A.nom, B.date D1, B.date D2
       FROM table1_tbl A, table2_tbl B
          WHERE A.table1_pk=B.table1_pk
    Ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    A.nom        D1           D2
    BOURG   2004-04-04   2004-04-04 
    BOURG   2004-04-14   2004-04-14 
    BOURG   2004-04-15   2004-04-15 
    BOURG   2004-04-26   2004-04-26 
    CITE    2004-03-09   2004-03-09 
    CITE    2004-03-10   2004-03-10
    J'aimerai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BOURG   2004-04-04   2004-04-26
    CITE    2004-03-09   2004-03-10
    A cette requête, je veux une ligne pour chaque A.nom et que D1 soit la plus vieille date et D2 la plus récente.
    J'espère que je me fais comprendre, sinon n'hésitez pas à me poser des questions.

  2. #2
    Membre expérimenté Avatar de TMuet
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2003
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 225
    Par défaut Re: Sélection multi table avec condition
    Citation Envoyé par iuz
    sinon n'hésitez pas à me poser des questions.
    Euh, comment ça va chez toi ?

  3. #3
    Membre expérimenté Avatar de TMuet
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2003
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 225
    Par défaut
    Un peu de sérieux TMuet :

    Il faut utiliser GROUP BY.
    Tu sélectionnes MIN(col1), MAX(col2) en groupant sur le nom

  4. #4
    Membre expérimenté Avatar de TMuet
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2003
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 225
    Par défaut
    Au fait, tu devrais jeter un coup d'oeil sur les tutoriels SQL.
    Tu gagnerais à utiliser JOIN ... ON plutôt que ta clause FROM ... WHERE.

  5. #5
    iuz
    iuz est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Par défaut
    Ca va mais t'avais pas le droit de poser de question, tu avais compris le message

    Il faut utiliser GROUP BY.
    Tu sélectionnes MIN(col1), MAX(col2) en groupant sur le nom
    Ca ne peut pas marcher car je ne veux pas la plus vieille date de la colonne mais le plus vieille pour un nom donné.
    Je vais jette un coup d'oeil du côté des JOIN ON mais ce n'est pas concluant pour le moment.

  6. #6
    iuz
    iuz est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Par défaut
    Ca y est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT A.nom, MIN(B.date), MAX(B.date)
    FROM table1_tbl A
    JOIN table2_tbl B ON A.table1_pk = B.table1_pk
    GROUP BY A.nom
    Merci TMuet

  7. #7
    iuz
    iuz est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Par défaut
    Aïe, en fait non, ce n'est pas tout à fait ça. Car il peut parfois y avoir des enregistrements qui ne comportent pas de dates. Et dans ce cas là, ils n'aparaissent pas. Problème

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 54
    Par défaut
    En rajoutant LEFT avant JOIN du récupérera les éléments de la premiere table ( LEFT ) qui n'ont pas de référence dans la deuxieme ( RIGHT )

    MIN(B.date) , MAX(B.date) seront NULL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT 
                A.nom,  MIN(B.date) ,  MAX(B.date)
    FROM 
                table1_tbl A
    LEFT JOIN 
                table2_tbl B 
    ON 
                A.table1_pk = B.table1_pk
    GROUP BY 
                A.nom

  9. #9
    iuz
    iuz est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Par défaut


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

Discussions similaires

  1. Requête multi-table avec même condition
    Par ShortcutZ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/03/2008, 19h14
  2. [MySQL] incrementation de table avec condition
    Par urbalk dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/12/2006, 21h36
  3. Requete multi table avec LIMIT et ORDER BY
    Par yobogs dans le forum Requêtes
    Réponses: 1
    Dernier message: 31/10/2006, 17h29
  4. DELETE multi-tables avec jointures
    Par Xunil dans le forum Requêtes
    Réponses: 13
    Dernier message: 23/10/2006, 16h44
  5. Réponses: 12
    Dernier message: 12/06/2006, 14h29

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