Jointure requete
Rayh
-
noob -
noob -
Bonjour,
et merci de prendre de votre temps pour m'aider
Voila mon problème, je suis actuellement en stage et je dois géré le droit d'accès des utilisateurs qui sont "cachés" dans trois tables différentes enfin c'est un bon bordel.
requete (sans jointure)
SELECT Distinct(LGAC.T_AGENT.COAGEN), NOAGEN, Prenom FROM LGAC.T_AGENT WHERE LGAC.T_AGENT.COAGEN IN(SELECT COAGE2 FROM LGAC.T_ACAGEN WHERE COAGE1='A999') OR LGAC.T_AGENT.COAGEN IN(SELECT LGAC.T_APSERV.COAGEN FROM LGAC.T_SERVIC, LGAC.T_DIRECT, LGAC.T_ACDIRE, LGAC.T_APSERV WHERE LGAC.T_ACDIRE.CODIRE = LGAC.T_SERVIC.CODIRE AND LGAC.T_APSERV.COSERV=LGAC.T_SERVIC.COSERV AND LGAC.T_ACDIRE.COAGEN ='A999') OR LGAC.T_AGENT.COAGEN IN(SELECT LGAC.T_APSERV.COAGEN FROM LGAC.T_ACSERV, LGAC.T_APSERV WHERE LGAC.T_APSERV.COSERV=LGAC.T_ACSERV.COSERV AND LGAC.T_ACSERV.COAGEN='A999') or LGAC.T_AGENT.COAGEN='A999'
Donc ça c'est ma requête pour récupére les nom et les prénom des agents sur lesquels la personne à un droit de regard
mais c'est une fois que j'ai ça j'aimerais récupérer le numéro de service de l'agent qui se trouve dans une autre table en fesant une jolie jointure (normal)
Requete (avec jointure)
SELECT Distinct(LGAC.T_AGENT.COAGEN), NOAGEN, COSERV, Prenom FROM LGAC.T_AGENT, LGAC.T_APSERV WHERE LGAC.T_APSERV.COAGEN=LGAC.T_AGENT.COAGEN AND LGAC.T_AGENT.COAGEN IN(SELECT COAGE2 FROM LGAC.T_ACAGEN WHERE COAGE1='A999') OR LGAC.T_AGENT.COAGEN IN(SELECT LGAC.T_APSERV.COAGEN FROM LGAC.T_SERVIC, LGAC.T_DIRECT, LGAC.T_ACDIRE, LGAC.T_APSERV WHERE LGAC.T_ACDIRE.CODIRE = LGAC.T_SERVIC.CODIRE AND LGAC.T_APSERV.COSERV=LGAC.T_SERVIC.COSERV AND LGAC.T_ACDIRE.COAGEN ='A999') OR LGAC.T_AGENT.COAGEN IN(SELECT LGAC.T_APSERV.COAGEN FROM LGAC.T_ACSERV, LGAC.T_APSERV WHERE LGAC.T_APSERV.COSERV=LGAC.T_ACSERV.COSERV AND LGAC.T_ACSERV.COAGEN='A999') or LGAC.T_AGENT.COAGEN='A999'
et la je ne comprends pas il répete autant de fois le nom et prénom de l'agent qu'il y a de service
Exemple (requete sans la jointure):
Dupond Jean
Dupont Toto
George Sand
Exemple (requete avec la jointure admettons qu'il y ait 4 service):
Dupond Jean
Dupond Jean
Dupond Jean
Dupond Jean
Dupont Toto
Dupont Toto
Dupont Toto
Dupont Toto
....
Enfin voila je pense que vous avez compris
D'avance merci bcp
et merci de prendre de votre temps pour m'aider
Voila mon problème, je suis actuellement en stage et je dois géré le droit d'accès des utilisateurs qui sont "cachés" dans trois tables différentes enfin c'est un bon bordel.
requete (sans jointure)
SELECT Distinct(LGAC.T_AGENT.COAGEN), NOAGEN, Prenom FROM LGAC.T_AGENT WHERE LGAC.T_AGENT.COAGEN IN(SELECT COAGE2 FROM LGAC.T_ACAGEN WHERE COAGE1='A999') OR LGAC.T_AGENT.COAGEN IN(SELECT LGAC.T_APSERV.COAGEN FROM LGAC.T_SERVIC, LGAC.T_DIRECT, LGAC.T_ACDIRE, LGAC.T_APSERV WHERE LGAC.T_ACDIRE.CODIRE = LGAC.T_SERVIC.CODIRE AND LGAC.T_APSERV.COSERV=LGAC.T_SERVIC.COSERV AND LGAC.T_ACDIRE.COAGEN ='A999') OR LGAC.T_AGENT.COAGEN IN(SELECT LGAC.T_APSERV.COAGEN FROM LGAC.T_ACSERV, LGAC.T_APSERV WHERE LGAC.T_APSERV.COSERV=LGAC.T_ACSERV.COSERV AND LGAC.T_ACSERV.COAGEN='A999') or LGAC.T_AGENT.COAGEN='A999'
Donc ça c'est ma requête pour récupére les nom et les prénom des agents sur lesquels la personne à un droit de regard
mais c'est une fois que j'ai ça j'aimerais récupérer le numéro de service de l'agent qui se trouve dans une autre table en fesant une jolie jointure (normal)
Requete (avec jointure)
SELECT Distinct(LGAC.T_AGENT.COAGEN), NOAGEN, COSERV, Prenom FROM LGAC.T_AGENT, LGAC.T_APSERV WHERE LGAC.T_APSERV.COAGEN=LGAC.T_AGENT.COAGEN AND LGAC.T_AGENT.COAGEN IN(SELECT COAGE2 FROM LGAC.T_ACAGEN WHERE COAGE1='A999') OR LGAC.T_AGENT.COAGEN IN(SELECT LGAC.T_APSERV.COAGEN FROM LGAC.T_SERVIC, LGAC.T_DIRECT, LGAC.T_ACDIRE, LGAC.T_APSERV WHERE LGAC.T_ACDIRE.CODIRE = LGAC.T_SERVIC.CODIRE AND LGAC.T_APSERV.COSERV=LGAC.T_SERVIC.COSERV AND LGAC.T_ACDIRE.COAGEN ='A999') OR LGAC.T_AGENT.COAGEN IN(SELECT LGAC.T_APSERV.COAGEN FROM LGAC.T_ACSERV, LGAC.T_APSERV WHERE LGAC.T_APSERV.COSERV=LGAC.T_ACSERV.COSERV AND LGAC.T_ACSERV.COAGEN='A999') or LGAC.T_AGENT.COAGEN='A999'
et la je ne comprends pas il répete autant de fois le nom et prénom de l'agent qu'il y a de service
Exemple (requete sans la jointure):
Dupond Jean
Dupont Toto
George Sand
Exemple (requete avec la jointure admettons qu'il y ait 4 service):
Dupond Jean
Dupond Jean
Dupond Jean
Dupond Jean
Dupont Toto
Dupont Toto
Dupont Toto
Dupont Toto
....
Enfin voila je pense que vous avez compris
D'avance merci bcp
A voir également:
- Jointure requete
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
- Erreur de requete facebook - Forum Facebook
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Java
- L'opérateur ou l'administrateur a refusé la requête ✓ - Forum Windows
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ? ✓ - Forum Loisirs / Divertissements
1 réponse
Plutôt illisible tout ça, tu pourrais faire un effort et lire les règles du forum
As-tu essayé de rajouter des parenthèses comme ci dessus ?
Pourquoi ne pas mettre la condition directement dans la jointure ?
Par exemple pour mysql :
SELECT Distinct(LGAC.T_AGENT.COAGEN), NOAGEN, COSERV, Prenom FROM LGAC.T_AGENT, LGAC.T_APSERV WHERE LGAC.T_APSERV.COAGEN=LGAC.T_AGENT.COAGEN AND ( LGAC.T_AGENT.COAGEN IN ( SELECT COAGE2 FROM LGAC.T_ACAGEN WHERE COAGE1='A999' ) OR LGAC.T_AGENT.COAGEN IN ( SELECT LGAC.T_APSERV.COAGEN FROM LGAC.T_SERVIC, LGAC.T_DIRECT, LGAC.T_ACDIRE, LGAC.T_APSERV WHERE LGAC.T_ACDIRE.CODIRE = LGAC.T_SERVIC.CODIRE AND LGAC.T_APSERV.COSERV=LGAC.T_SERVIC.COSERV AND LGAC.T_ACDIRE.COAGEN ='A999' ) OR LGAC.T_AGENT.COAGEN IN ( SELECT LGAC.T_APSERV.COAGEN FROM LGAC.T_ACSERV, LGAC.T_APSERV WHERE LGAC.T_APSERV.COSERV=LGAC.T_ACSERV.COSERV AND LGAC.T_ACSERV.COAGEN='A999' ) or LGAC.T_AGENT.COAGEN='A999' )
As-tu essayé de rajouter des parenthèses comme ci dessus ?
Pourquoi ne pas mettre la condition directement dans la jointure ?
Par exemple pour mysql :
SELECT ... FROM LGAC.T_AGENT INNER JOIN LGAC.T_APSERV ON LGAC.T_APSERV.COAGEN=LGAC.T_AGENT.COAGEN WHERE...