Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 14 sur 14
  1. #1
    Invité de passage
    Inscrit en
    juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 8
    Points : 1
    Points
    1

    Par défaut Jointure de deux tables

    Bonjour à vous tous,
    j'ai un souci pour extraire des données de deux tables dans une autre en gardant toujours toutes les colonnes de chacune comme suite:
    Table 1: col_1 ( 1,2,3,4,5,6)
    Table 2: col_2( 2,6,4)
    alors en faisant la jointure des ces deux tables, je veux avoir une table 3 avec les deux colonnes ( col_1 et col_2) mais en gardant l'ensemble de la col_1 comme suite:
    table3 : col_1(1,2,3,4,5,6)
    col_2( , 2, ,4, ,6)

    j'ai essayé avec ça mais ça na pas marché:
    Code :
    1
    2
    3
    4
    5
    SELECT 
       a.col_1, b.col_2
    FROM table1 AS a
      LEFT JOIN table2 AS b
      ON a.col_1 = b.col_2

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro Alain
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    5 480
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 5 480
    Points : 13 686
    Points
    13 686

    Par défaut

    Citation Envoyé par Sakura.ha Voir le message
    ça na pas marché:
    Quel résultat as-tu obtenu ?
    C'est cela qui pourra aiguiller vers une solution !
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Invité de passage
    Inscrit en
    juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 8
    Points : 1
    Points
    1

    Par défaut

    Merci pour votre reponse,
    et voila le résultat que j'ai obtenu c'est
    table3 : col_1(2,6,4)
    col_2(2,6,4)
    moi je veux garder l’ensemble de valeur de la colonne de la première table même s'ils existent pas dans la 2eme table
    Autrement dit: toutes les lignes de la première table doivent figurer dans les résultats, qu'il y ait ou non des données correspondantes dans la 2 ème table.

  4. #4
    Modérateur

    Homme Profil pro Fabien
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 736
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabien
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 6 736
    Points : 14 929
    Points
    14 929

    Par défaut

    Quel est votre SGBD ?

  5. #5
    Invité de passage
    Inscrit en
    juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 8
    Points : 1
    Points
    1

    Par défaut

    Je travaille sous SQLSERVER/2008

  6. #6
    Modérateur

    Homme Profil pro Fabien
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 736
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabien
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 6 736
    Points : 14 929
    Points
    14 929

    Par défaut

    La jointure doit suffire alors :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    WITH Table1 (col_1) AS
    (
    SELECT 1 union ALL
    SELECT 2 union ALL
    SELECT 3 union ALL
    SELECT 4 union ALL
    SELECT 5 union ALL
    SELECT 6
    )
      ,  Table2 (col_2) AS
    (
    SELECT 2 union ALL
    SELECT 6 union ALL
    SELECT 4
    )
        SELECT t1.col_1, t2.col_2
          FROM Table1 AS t1
     LEFT JOIN Table2 AS t2
            ON t1.col_1 = t2.col_2;
     
    col_1       col_2
    ----------- -----------
    1           NULL
    2           2
    3           NULL
    4           4
    5           NULL
    6           6

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro Alain
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    5 480
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 5 480
    Points : 13 686
    Points
    13 686

    Par défaut

    Est-ce bien exactement la requête que tu exécutes ?
    N'y a-t-il pas d'autres clauses dans ta requête, en particulier un WHERE avec une condition sur la table ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #8
    Invité de passage
    Inscrit en
    juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 8
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par al1_24 Voir le message
    Est-ce bien exactement la requête que tu exécutes ?
    N'y a-t-il pas d'autres clauses dans ta requête, en particulier un WHERE avec une condition sur la table ?
    Oui c'est bine ça ma requête mais j(ajoute une clause where ( where CONVERT(date,tab1.date1) = CONVERT(date,getdate())

  9. #9
    Modérateur

    Homme Profil pro Fabien
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 736
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabien
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 6 736
    Points : 14 929
    Points
    14 929

    Par défaut

    Sur la table 2 plutôt non ?

  10. #10
    Invité de passage
    Inscrit en
    juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 8
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par Waldar Voir le message
    Sur la table 2 plutôt non ?
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT a.col_1 "plageHoraire"
    ,(convert(time,b.col_2)) "rdv"
     
     
      FROM table1 AS a
     LEFT JOIN table2 AS b
      ON  convert(convert(time,b.col_2))= a.col_1 
     
       WHERE CONVERT(date,b.col_2) = CONVERT(date,getdate())

    Voici ma requête , la table 1 , c'est celle ou tout les lignes doivent figurer dans les résultats qu'il y ait ou non des données correspondantes dans la table2

  11. #11
    Modérateur

    Homme Profil pro Fabien
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 736
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabien
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 6 736
    Points : 14 929
    Points
    14 929

    Par défaut

    Comme ceci :
    Code :
    1
    2
    3
    4
    5
    6
        SELECT a.col_1               AS "plageHoraire"
             , convert(time,b.col_2) AS "rdv"
          FROM table1 AS a
     LEFT JOIN table2 AS b
            ON convert(time,b.col_2) = a.col_1 
           AND CONVERT(date,b.col_2) = CONVERT(date,getdate());

  12. #12
    Modérateur
    Avatar de al1_24
    Homme Profil pro Alain
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    5 480
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 5 480
    Points : 13 686
    Points
    13 686

    Par défaut

    C'est certainement mieux comme ça :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  a.col_1 "plageHoraire"
        ,   (CONVERT(TIME, b.col_2)) "rdv"
    FROM    table1  AS a
        LEFT JOIN
            table2  AS b
            ON  CONVERT(CONVERT(TIME, b.col_2)) = a.col_1 
            AND CONVERT(DATE, b.col_2) = CONVERT(DATE, GETDATE())
    ;
    En plaçant la restriction CONVERT(DATE, b.col_2) = CONVERT(DATE, GETDATE()) dans la clause WHERE, tu supprimes l'effet de la jointure externe.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  13. #13
    Invité de passage
    Inscrit en
    juillet 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 8
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par al1_24 Voir le message
    C'est certainement mieux comme ça :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  a.col_1 "plageHoraire"
        ,   (CONVERT(TIME, b.col_2)) "rdv"
    FROM    table1  AS a
        LEFT JOIN
            table2  AS b
            ON  CONVERT(CONVERT(TIME, b.col_2)) = a.col_1 
            AND CONVERT(DATE, b.col_2) = CONVERT(DATE, GETDATE())
    ;
    En plaçant la restriction CONVERT(DATE, b.col_2) = CONVERT(DATE, GETDATE()) dans la clause WHERE, tu supprimes l'effet de la jointure externe.

    ah d’accord , la ça marche nickel : )
    Merci beaucoup

  14. #14
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 713
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 713
    Points : 25 575
    Points
    25 575

    Par défaut

    Pour plus d'explication sur le phénomène, voir mon blog.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •