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 :

Jointures en SQL


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 58
    Points : 44
    Points
    44
    Par défaut [Résolu] Jointures en SQL
    Voici mon problème:

    - j'ai deux tables temporaires que je dois "fusionner" dans une table. ces deux tables ont la même structure: (SGBD=SQL Server)
    --------------------------------------------------------------------------------------
    Table1: CREATE TABLE #CiblesClicsOpens(CibleId Int, TempsId Int, OClics tinyint, Campaignid int, Customerid Int)
    Table2: CREATE TABLE #CiblesClics(CibleId Int, TempsId Int, Clics tinyint, Campaignid int, CustomerId Int)

    et je dois les copier vers une table qui reprends ces champs:

    TABLE (CibleId, TempsId,Campaignid,CustomerId,Clics, OClics)

    en conservant tous les enregistrements (la clé primaire de ma table cible est composée des champs soulignés)

    Je pense à une jointure de type FULL OUTER JOIN mais la syntaxe suivante ne fonctionne pas:

    SELECT * FROM #CiblesClicsOpens UNION JOIN ON #CiblesClics

    Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Personnellement je n'utiliserais pas de jointure mais une union.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select CibleId , TempsId , OClics , Campaignid , Customerid  
    from  #CiblesClicsOpens
    union
    Select CibleId , TempsId , OClics , Campaignid , Customerid  
    from #CiblesClics
    Où je n'ai pas compris ce que tu veux faire.
    a+
    Soazig

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Quand tu dis copier... tu veux dire recopier tous les enregistrements des deux tables temporaires dans ta table ?
    1 enregsitrement de la table CiblesClicsOpens donne 1 enregistrement dans la table TABLE avec la colonne Clics à null
    et
    1 enregsitrement de la table CiblesClics donne 1 enregistrement dans la table TABLE avec la colonne OClics à null
    ?

    Dans ce cas une requete insert avec select union devrait faire l'affaire

    Ou bien cherches tu à regrouper sur un enregistrement deux enregistrements (1 de CiblesClics et 1 de CiblesClicsOpens) ?

    Dans ce cas un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into TABLE (CibleId, TempsId,Campaignid,CustomerId,Clics, OClics) select T.CibleId, T.TempsId, T.Campaignid, T.CustomerId, T.Clics, T2.OClics from CiblesClics T full outer join CiblesClicsOpens T2 on (T.CibleId= T2.CibleId and T.TempsId = T2.TempsId and T.Campaignid = T2.Campaignid and T.CustomerId = T2.CustomerId);
    J'ai supposé que s'il n'y avait pas de correspondance entre la table CiblesClicsOpens et CiblesClics tu voulais quand même enregistrer l'info dans TABLE avec Clics ou OClics à null suivant l'enregsirement manquant...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    Le problème c'est que comme ça je perd une partie de l'info. (il y'a Clics et OClics) ...

    en fait ma table cible doit TOUT contenir (avec 0 pour entrée si Clics ou Oclics n'est pas renseigné par clé. )

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 58
    Points : 44
    Points
    44
    Par défaut en réponse à Barbibulle
    c'est le deuxième cas qui m'interesse (regrouper pour 1 même clé Clics et OClics)

  6. #6
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Soazig n'a pas remarqué qu il y avait Oclics et Clics mais il suffit d'adapter...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Insert into TABLE (CibleId , TempsId , Campaignid , Customerid, Clics ,OClics)
    Select CibleId , TempsId , Campaignid , Customerid, null,  OClics
    from  #CiblesClicsOpens
    union
    Select CibleId , TempsId , Campaignid , Customerid, Clics, null  
    from #CiblesClics
    Mais si tu veux regrouper les Clics et Oclics correspondant fait la jointure comme je te l'ai expliqué...

  7. #7
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut Re: en réponse à Barbibulle
    Citation Envoyé par Guizz
    c'est le deuxième cas qui m'interesse (regrouper pour 1 même clé Clics et OClics)
    ah et bien fait la jointure...
    Et si tu ne veux en résultat que les enregistrements ayant un clics et un oclics il faut que tu fasses un inner join à la place de full outer join.

    Bon Dev !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    2 PB différents:

    Cas 1 (avec l'UNION): je n'ai pas les enr. où Clics ET OClics sont à 1 tout les deux pour la clé

    Cas 2 (FULL OUTER JOIN): je n'ai que les enr. où Clics ET OClics sont à 1, les autres étant à NULL

    je suppose qu'il faut un mix des deux ... ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    Cas 1 (avec l'UNION): je n'ai pas les enr. où Clics ET OClics sont à 1 tout les deux pour la clé
    ex:
    1954 851055 4285 269 0 1
    1954 851059 4285 269 1 0
    1954 851062 4285 269 1 0
    1960 854923 4285 269 0 1


    Cas 2 (FULL OUTER JOIN): je n'ai que les enr. où Clics ET OClics sont à 1, les autres étant à NULL.
    ex:
    NULL NULL NULL NULL NULL 1
    99567 325776 1101 43 1 1
    NULL NULL NULL NULL NULL 1


    CAS 3 (INNER): je n'ai que les enr. où Clics ET OClics sont à 1.
    ex:
    99567 325776 1101 43 1 1
    99587 337699 1101 43 1 1
    99662 327203 1101 43 1 1
    99664 325847 1101 43 1 1

  10. #10
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    en gros il faudrait reprendre le outter join a barbibulle, en récupérant les 4 champs de clé primaires dans la deuxieme tables lorsque on a pas de champ dans la première table correspondant.

    L'autre methode, c la suivante :

    requete en INNER JOIN, UNION requete entrées de la 1ere table ou il n'y a pas de correspondance sur la 2eme table, UNION requete entrées de la 2eme table ou il n'y a pas de correspondance sur la 1ere table

    soit si je me plante pas :
    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
    18
    19
    20
    21
    insert into TABLE (CibleId, TempsId,Campaignid,CustomerId,Clics, OClics) 
    select T.CibleId, T.TempsId, T.Campaignid, T.CustomerId, T.Clics, T2.OClics 
    from CiblesClics T INNER join CiblesClicsOpens T2 on 
    (T.CibleId= T2.CibleId and 
    T.TempsId = T2.TempsId and 
    T.Campaignid = T2.Campaignid and 
    T.CustomerId = T2.CustomerId)
    UNION
    Select T3.CibleId, T3.TempsId, T3.Campaignid, T3.CustomerId, T3.Clics 
    from CiblesClics T3 where 
    T3.CibleId NOT IN (select CibleID from CiblesClicsOpens) OR
    T3.TempsId NOT IN (select TempsID from CiblesClicsOpens) OR
    T3.CampaignId NOT IN (select CampaignID from CiblesClicsOpens) OR
    T3.CustomerId NOT IN (select CustomerID from CiblesClicsOpens)
    UNION
    Select T4.CibleId, T4.TempsId, T4.Campaignid, T4.CustomerId, T4.OClics 
    from CiblesClicsOpens T4 where 
    T4.CibleId NOT IN (select CibleID from CiblesClics) OR
    T4.TempsId NOT IN (select TempsID from CiblesClics) OR
    T4.CampaignId NOT IN (select CampaignID from CiblesClics) OR
    T4.CustomerId NOT IN (select CustomerID from CiblesClics);

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    Merci ça a l'air d'être ça avec pour petite modification l'ajout de :

    T4.CibleId, T4.TempsId, T4.Campaignid, T4.CustomerId, 0, T4.OClics & T3.CibleId, T3.TempsId, T3.Campaignid, T3.CustomerId, T3.Clics,0


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

Discussions similaires

  1. [CR 10] Option sous état - Jointure - Expression SQL
    Par Chuppas dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/05/2010, 14h01
  2. pb jointure syntax sql
    Par philippe sivy dans le forum Langage SQL
    Réponses: 12
    Dernier message: 21/08/2008, 13h52
  3. Jointure composé SQL 2005
    Par yonialhadeff dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/01/2007, 23h01
  4. Jointures simples SQL
    Par thibaud28 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/12/2006, 23h54
  5. [MySQL] Jointures externes SQL (débutant)
    Par Invité dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/08/2006, 13h12

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