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 :

Requete jointure conditionnel


Sujet :

Langage SQL

  1. #1
    Membre confirmé Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Points : 527
    Points
    527
    Par défaut Requete jointure conditionnel
    Bonjour,

    J'aimerais savoir s'il était possible de faire une requête avec une jointure conditionnel ?

    En fait j'ai une jointure qui si un champ particulier est null doit se faire sur un champ sinon un autre.

    Pensez-vous que c'est possible ?
    Je fais ce que je dis et je dis ce que je veux .

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    En théorie non, une jointure se fait toujours.

    Tu pourrais préciser ton besoin réel ? Je ne suis pas sûr de bien comprendre.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  3. #3
    Membre confirmé Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Points : 527
    Points
    527
    Par défaut
    Oui alors voila un petit schéma :



    Dans l'idée se que je voudrais faire :

    Si Table1.champ1 est null on fait la jointure J2
    Sinon on fait jointure J1

    J'espère que c'est clair
    Je fais ce que je dis et je dis ce que je veux .

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Je comprends le schéma mais je ne comprends pas le besoin réel de faire ça.

    En principe, dans une base de données normalisée, les jointures s'opèrent entre des identifiants et des clés étrangères, lesquels ne sont jamais NULL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  5. #5
    Membre confirmé Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Points : 527
    Points
    527
    Par défaut
    Je sais bien mais la je ne vois pas comment faire autrement.

    En fait j'ai une table contrat (table 1), un table client(table2),une table Tiers(table3), en gros le problème c'est que dans contrat j'ai deux champ différents, une premier pour id du client l'autre pour le prospect donc si je fait disons un contrat à un prospect mon id_client n'existera pas encore.

    Et une fois le client créé je vais chercher les info clients.
    Je fais ce que je dis et je dis ce que je veux .

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    N'y a t-il pas là une erreur de conception ?

    Un prospect auquel on fait un contrat devient un client !
    Le processus voudrait donc que l'on transforme d'abord le prospect en client avant d'enregistrer le contrat. Et donc la table contrat n'aurait plus que l'identifiant du client pour clé étrangère.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  7. #7
    Membre confirmé Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Points : 527
    Points
    527
    Par défaut
    Ce n'est pas moi qui est créé la base et j'ai schématiser le process ^^

    en fait lorsque tu créés un contrat pour un prospect ce n'est qu'une proposition de contrat donc tant qu'il n'a pas accepté il reste prospect, hors avec la même requête je doit pouvoir généré un contrat pour un client existant

    Je sais que c'est loin d'être simple et c'est encore pire pour l'expliquer lol.
    Je fais ce que je dis et je dis ce que je veux .

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    OK. Je comprends mieux.

    Maintenant quel est le but de la requête que tu cherches à faire ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  9. #9
    Membre confirmé Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Points : 527
    Points
    527
    Par défaut
    En fait le but est de recup les infos du tiers (client ou prospect suivant le cas)

    Donc si c'est un client on passe par

    CONTRAT -> CLIENT -> TIERS

    Sinon

    CONTRAT -> TIERS

    Car sinon j'ai penser à une solution : Mettre mon id_prospect dans tout les cas dans la table CONTRAT même lorsqu'on est client ce qui réduirais la requête à CONTRAT -> TIERS mais bon c'est pas très propre car on a déjà la clé étrangère du tiers dans le client, c'est un peut stupide à mon avis
    Je fais ce que je dis et je dis ce que je veux .

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    Je ne connais les champs de tes tables
    mais essais avec une jointure externe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Select teschamps
    Fom CONTRAT
    Inner join TIERS 
    ON ... 
    Left join  CLIENT
    ON ..

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Tu peux nous donner la structure des tes 3 tables ?

    Mettre mon id_prospect dans tout les cas dans la table CONTRAT même lorsqu'on est client ce qui réduirais la requête à CONTRAT -> TIERS mais bon c'est pas très propre car on a déjà la clé étrangère du tiers dans le client, c'est un peut stupide à mon avis
    Je pense justement que ceci serait la meilleure solution.
    J'interprète ce que tu dis comme le fait que le client hérite du tiers.
    Dès lors, le chemin serait Contrat => Tiers => Client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT ct.les_colonnes_souhaitees_du_contrat,
      ti.les_colonnes_souhaitees_du_tiers,
      cl.les_colonnes_souhaitees_du_client
    FROM Contrat AS ct
    INNER JOIN Tiers AS ti ON ct.identifiant_tiers = ti.identifiant_tiers
      LEFT OUTER JOIN Client AS cl ON ti.identifiant_tiers = cl.identifiant_tiers
    WHERE le_contrat_souhaité
    Si c'est une proposition de contrat à un prospect, les colonnes issues de la table des clients seront à NULL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

Discussions similaires

  1. requetes avec jointures conditionnelles
    Par danytro dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/09/2012, 11h35
  2. Requete avec jointure conditionnelle
    Par grunk dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/08/2009, 16h00
  3. pb requete avec jointure ( conditionnelle !?!)
    Par raspout81 dans le forum Requêtes
    Réponses: 5
    Dernier message: 12/07/2007, 21h33
  4. [Requete] jointure externe -> where
    Par MrDuChnok dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/07/2004, 15h48
  5. requete(jointure 2 tables) qui marche pas
    Par DaxTaz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2004, 17h50

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