Rechercher : dans
Par :

Jointure requete

Dernière réponse le 29 jun 2009 à 18:06:19 Rayh, le 29 jun 2009 à 14:58:48 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP Internet Explorer 6.0

Meilleures réponses pour « jointure requete » dans :
Envoyer de gros fichiers (pièces jointes) par mail VoirLes systèmes de messagerie bloquent généralement les pièces jointes volumineuses, alors comment faire parvenir un fichier lourd (de plusieurs Mo) à son destinataire ? La solution consiste à utiliser un service d'hébergement temporaire de fichiers...
[Outlook Express] Pièces jointes impossibles à envoyer VoirSi Outlook Express ne peut pas envoyer les pièces jointes ajoutées à votre mail, ceci est probablement dû au fait qu'elles possèdent une taille trop volumineuse. Pour y remédier, la solution consiste à scinder les pièces jointes en plusieurs...
Outlook Express bloque les pièces jointes VoirLors de la consultation d'un email, Outlook (Express) refuse d'ouvrir les fichiers attachés. Il s'agit vraisemblablement d'un problème de configuration de Outlook évitant l'ouverture des pièces jointes pour des raisons de sécurité. Pour y...
SQL - Jointures VoirExpression des jointures Une jointure (ou θ-jointure) est un produit cartésien de deux tables. On appelle équijointure une θ-jointure dont la qualification est une égalité entre deux colonnes. En SQL, l'expression d'une jointure se...
SQL - Sous-requêtes VoirExpression des sous-requêtes Effectuer une sous-requête consiste à effectuer une requête à l'intérieur d'une autre, ou en d'autres termes d'utiliser une requête afin d'en réaliser une autre (on entend parfois le terme de requêtes en...
Exécution de requêtes avec JDBC VoirExécution d'une requête SQL Pour exécuter une requête SQL, il s'agit dans un premier temps de créer un objet Statement, pouvant être obtenu à partir de l'objet Connection. Un objet ResultSet permettra de récupérer les données en provenance de...

1

 noob, le 29 jun 2009 à 18:06:19

Plutôt illisible tout ça, tu pourrais faire un effort et lire les règles du forum

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...

Répondre à noob