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 ?
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 .
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 !
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 .
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 !
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 .
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 !
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 .
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 !
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 .
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 ..
Tu peux nous donner la structure des tes 3 tables ?
Je pense justement que ceci serait la meilleure 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
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 :
Si c'est une proposition de contrat à un prospect, les colonnes issues de la table des clients seront à NULL.
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é
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 !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager