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 :

comment associer 3 tables n'ayant pas de champs communs ?


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut comment associer 3 tables n'ayant pas de champs communs ?
    Bonjour

    j'ai deux tables ayant un champ commum mais en sql je ne sais pas associer cette combinaison avec une autre table qui elle, n'a rien en commun avec les deux suivantes !

    table 1 : info du style nom, prenom,etc,...
    table 2 : info du style montant payé, montant reçu,...

    ces deux tables sont déjà liées correctement par un champ commun dont je vous épargne les détails !

    Il reste donc la dernière table :

    table 3 : rappel1 ,rappel de type 2, rappel de type 3,...

    J'aimerai qu'à chaque listing d'affichage , je vois comme déjà d'actualité ma table 1 et 2 liée avec à la suite de chaque ligne la table3 dont les champs suivants sont : rappel1, rappel2, rappel3, rappel4.

    En sql peut on lier cela ?

    merci à vous

  2. #2
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Si je comprends bien ton problème, l'addition cartésienne simple devrait te donner ce que tu désires, càd pour chaque jointure entre table1 et table2, une jointure avec chacune des lignes de ta table3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT table1.nom, table2.tarif, table3.libelle_regle
    FROM table1 INNER JOIN table2 ON table1.champ_detail_epargne=table2.champ_detail_epargne,
         table3;
    C'est ca ? (Par contre je vais rentrer manger quand meme, donc peut-etre à demain)

    ++
    Ingénieur Génie Logiciel et Systèmes d'Information
    Management des Nouvelles Technologies

    Ecole Supérieure d'Ingénieurs de Luminy (ESIL), Marseille

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut
    et bien écoute

    tu as bien compris ce que je voulais faire !

    Donc apparemment, on peut lier de cette sorte mais j'ai quand même une petite question à préciser :

    cela sera t'il possible en sachant que de par ma réunion entre la table1 et la table 2, je fais un sum des champs montants payés et montants reçus ?

    si je joins ma table 3 à la suite, il n'y aura pas de problèmes de fonctions d'agrégat qui se dégageraient des deux premières tables ?


    merci

  4. #4
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Citation Envoyé par bertrand_declerck
    Donc apparemment, on peut lier de cette sorte
    En fait c'est le principe même du fonctionnement des jointures. C'est pour filtrer toutes ces lignes générées qu'on utilise en général des conditions de jointure (clause WHERE avec =, ou FROM avec INNER/OUTER JOIN ON)

    Citation Envoyé par bertrand_declerck
    cela sera t'il possible en sachant que de par ma réunion entre la table1 et la table 2, je fais un sum des champs montants payés et montants reçus ?
    si je joins ma table 3 à la suite, il n'y aura pas de problèmes de fonctions d'agrégat qui se dégageraient des deux premières tables ?
    Pas que je sache. Mais montre donc tes tables et ta requête...
    Ingénieur Génie Logiciel et Systèmes d'Information
    Management des Nouvelles Technologies

    Ecole Supérieure d'Ingénieurs de Luminy (ESIL), Marseille

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par bertrand_declerck
    si je joins ma table 3 à la suite, il n'y aura pas de problèmes de fonctions d'agrégat qui se dégageraient des deux premières tables ?
    Toutes tes sommes seront multipliées par le nombre de lignes de la table 3 ; s'il y a qu'une seule ligne dans ta table 3, pas de problème.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  6. #6
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Citation Envoyé par Médiat
    Toutes tes sommes seront multipliées par le nombre de lignes de la table 3
    Je pense que c'est ce qu'il désire...
    Ingénieur Génie Logiciel et Systèmes d'Information
    Management des Nouvelles Technologies

    Ecole Supérieure d'Ingénieurs de Luminy (ESIL), Marseille

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut
    Voilà ma requête entre la table 2 et la table 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT CLIENTS.CLINOM1 as CLIENTS , Sum(MVTS.MVTDEBIT) - Sum(MVTS.MVTCREDIT) as Somme 
     
    FROM CLIENTS INNER JOIN MVTS ON CLIENTS.CLICODE = MVTS.MVTCOMPTE 
     
    WHERE (((MVTS.MVTCLETTR)<>-1)) 
    GROUP BY CLIENTS.CLINOM1
    elle fonctionne bien.

    mais quid de la table 3 : rappel1,rappel2,rappel3,rappel4 de la table 3 ?

    [/code]

  8. #8
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT CLIENTS.CLINOM1 as CLIENTS , Sum(MVTS.MVTDEBIT) - Sum(MVTS.MVTCREDIT) as Somme, rappel1, rappel2, rappel3, rappel4 
     
    FROM CLIENTS INNER JOIN MVTS ON CLIENTS.CLICODE = MVTS.MVTCOMPTE 
                 CROSS JOIN Table3
    WHERE (((MVTS.MVTCLETTR)<>-1)) 
    GROUP BY CLIENTS.CLINOM1, rappel1, rappel2, rappel3, rappel4
    Mais attention à tes sommes si (rappel1, rappel2, rappel3, rappel4) n'est pas une clé de table3 : tes sommes seraient multipliées.

    Sinon tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Clients, Somme, rappel1, rappel2, rappel3, rappel4  
    FROM (
    SELECT CLIENTS.CLINOM1 as CLIENTS , Sum(MVTS.MVTDEBIT) - Sum(MVTS.MVTCREDIT) as Somme 
     
    FROM CLIENTS INNER JOIN MVTS ON CLIENTS.CLICODE = MVTS.MVTCOMPTE 
     
    WHERE (((MVTS.MVTCLETTR)<>-1)) 
    GROUP BY CLIENTS.CLINOM1  ) CROSS JOIN Table3
    et là tes sum ne seront pas multipliées quoiqu'il arrive.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  9. #9
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT CLIENTS.CLINOM1 AS CLIENTS,
           SUM(MVTS.MVTDEBIT) - SUM(MVTS.MVTCREDIT) AS Somme, 
           TABLE3.RAPPEL1,
           TABLE3.RAPPEL2,
           TABLE3.RAPPEL3,
           TABLE3.RAPPEL4
    FROM CLIENTS INNER JOIN MVTS ON CLIENTS.CLICODE = MVTS.MVTCOMPTE,
         TABLE3
    WHERE (MVTS.MVTCLETTR <> -1)
    GROUP BY CLIENTS.CLINOM1;
    Mais comme Médiat a dit tu vas te retouver avec bcp bcp de lignes...

    >edit
    Oups, désolé Médiat tu as été plus vif et apparemment meilleur que moi
    Ingénieur Génie Logiciel et Systèmes d'Information
    Management des Nouvelles Technologies

    Ecole Supérieure d'Ingénieurs de Luminy (ESIL), Marseille

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut
    merci de vos conseils !

    Mais au fait que signifie cette touche :

    'CROSS JOIN' ?

    merci

  11. #11
    Membre habitué Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Points : 192
    Points
    192
    Par défaut
    Ce n'est pas une "touche", ce sont des mots réservés pour exprimer une jointure croisée...
    Ingénieur Génie Logiciel et Systèmes d'Information
    Management des Nouvelles Technologies

    Ecole Supérieure d'Ingénieurs de Luminy (ESIL), Marseille

Discussions similaires

  1. Comment supprimé les lignes n'ayant pas 12 caractères
    Par chris1293 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/06/2014, 17h10
  2. Réponses: 2
    Dernier message: 17/10/2012, 08h53
  3. Réponses: 6
    Dernier message: 19/07/2009, 17h52
  4. comment associer une table a un onglet ?
    Par Jog_06 dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 07/08/2008, 16h38
  5. Fusionner deux tables n'ayant pas (ou peu) de variables communes
    Par Pierre Jean-Pierre dans le forum SAS Base
    Réponses: 2
    Dernier message: 22/07/2008, 15h17

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