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

MS SQL Server Discussion :

inner join


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 63
    Points : 40
    Points
    40
    Par défaut inner join
    voila, j'ai une requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT     p1.employee_number, p1.surname AS employee_surname, p1.forenames AS employee_forenames, p1.continuous_start_date AS employee_start_date,
                           p1.termination_date AS employee_termination_date, p2.employee_number AS manager_number, p2.surname AS manager_surname, 
                          p2.forenames AS manager_forenames, p2.email_address AS manager_email, p2.generic_department AS manager_generic_department_code, 
                          g2.description AS manager_generic_department_description, co2.description AS manager_country_description
    FROM         xcountry co2 RIGHT OUTER JOIN
                          people p1 LEFT OUTER JOIN
                         [color=red] manager m1 ON p1.unique_identifier = m1.parent_identifier LEFT OUTER JOIN [/color]
                          people p2 ON m1.manager_number = p2.employee_number LEFT OUTER JOIN
                          xgendept g2 ON p2.generic_department = g2.code ON co2.code = p2.country
    WHERE     (p1.termination_date IS NOT NULL) AND (DATEDIFF(day, p1.termination_date, GETDATE() - 1) < 0) AND (DATEDIFF(day, GETDATE() - 1, p1.termination_date) < 31)
    la partie qui me fait chier, c'est celle en rouge,
    en fait, je ne voudrais pas faire un inner join sur tout les m1.parent_identifier, mais que sur un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select top 1 parent_identifier from manager m1 where p1.unique_identifier = m1.parent_identifier order by manager_date desc
    quelqu'un sait commetn faire ???
    Pourquoi un PC fait-il toujours ce qu'on lui demande, mais alors jamais ce qu'on veut...

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Sur un quoi ?
    En tout cas ce n'est pas du tout clair !

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    desole, mais c'est vrai que ne relisant, c'est pas trop trop clair..!

    donc en fait, le inner join s'effectue sur
    p1.unique_identifier = m1.parent_identifier

    le truc, c'est que il peux y avoir plusieur m1.parent_identifier identique, mais dans ma table m1, j'ai une colonne appelle manager_date, ce qui pourrait me permettre de faire le inner join en prenant le plus recent des m1.parent_identifier.

    J'espere que c'est plus clair.

    merci de ton aide
    Pourquoi un PC fait-il toujours ce qu'on lui demande, mais alors jamais ce qu'on veut...

  4. #4
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Oxley | Sylvain truc            | 05/08/2004 
    Oxley |  Catherine bidule       | 12/01/2004 
    Oxley | Joe  Doe                | 03/07/2004
    voila ce que me retourne par exemp-le ma requete (en racourcis), le premier nom etant le nom de l'employee, le deuxieme, le nom de son manager, le troisieme etant la "manager_date"

    je ne voudrai avoir plus qu'un seul champ avec le manager le plus recent, dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Oxley | Rajput  Nadeem                    |05/08/2004
    Pourquoi un PC fait-il toujours ce qu'on lui demande, mais alors jamais ce qu'on veut...

  5. #5
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    ta sous requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select top 1 parent_identifier from manager m1 where p1.unique_identifier = m1.parent_identifier order by manager_date desc
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select parent_identifier 
    from manager m1 
    where p1.unique_identifier = m1.parent_identifier 
    and manager_date=(select Max(manager_date) from manager m2
                                   where m1.parent_identifier=m2.parent_identifier )
    A+

  6. #6
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    merki, je vais tenter ca...

    desole si la question etait pas super clair....
    Pourquoi un PC fait-il toujours ce qu'on lui demande, mais alors jamais ce qu'on veut...

  7. #7
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    bon donc g remplace le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     [...]  LEFT OUTER JOIN
                          manager m1 ON p1.unique_identifier = m1.parent_identifier [...]
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LEFT OUTER JOIN
                          manager m1 ON p1.unique_identifier = m1.parent_identifier and m1.manager_date < getdate() and m1.manager_date =(select Max(manager_date) from pwa_master.manager m2 
                                   where m1.parent_identifier=m2.parent_identifier )
    et hop.. ca marche, pas de pb... en te remerkiant
    Pourquoi un PC fait-il toujours ce qu'on lui demande, mais alors jamais ce qu'on veut...

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

Discussions similaires

  1. Mysql Inner join
    Par ..:: Atchoum ::.. dans le forum Requêtes
    Réponses: 3
    Dernier message: 25/10/2007, 12h21
  2. Nombre de clauses ON dans un INNER JOIN
    Par Shadow aok dans le forum Requêtes
    Réponses: 5
    Dernier message: 30/06/2004, 15h42
  3. [ requeste sql ]INNER JOIN / OUTER JOIN
    Par hocinema dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/04/2004, 21h28
  4. Erreur lors d'une requete INNER JOIN
    Par k-lendos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/03/2004, 15h09
  5. Inner Join & Select
    Par bakaneko dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/02/2004, 10h48

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