L'indentation ne consiste pas à mettre des tabulations un peu partout mais à aider la lecture du code. Dans une requête SQL, notamment, l'indentation des jointures permet de lire le parcours du modèle de données.

Voilà votre requête un peu mieux présentée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT  DISTINCT t5.identifiantpersonne
FROM Tablepaiement3 t1
INNER JOIN tablePaiement2 t7 ON t1.idrefT7 = t7.id
INNER JOIN archive2 t2 ON t1.idrefT3 = t2.idrefT3
	INNER JOIN archive1 t3 ON t2.idrefT3 = t3.id
		INNER JOIN entreprise t4 ON t3.idrp = t4.id
			INNER JOIN personne t5 ON t4.idrefT5 = t5.idrefT5
		INNER JOIN campagneExercice1 t6 ON t3.idreft6 = t6.id
	INNER JOIN entreprise t8 ON t8.id = t2.c211_idEnt
		INNER JOIN tableRelationEnt t9 ON t9.idrp_1 = t8.id AND t9.idrp_2 = t4.id
WHERE t8.numero_ent = '1234'
	AND t7.dateexercice >= to_date('2017/01/01','yyyy/mm/dd')
	AND t7.dateexercice <= to_date('2017/12/31','yyyy/mm/dd')
	AND t7.dateexercice <= t9.Date_JUSQUAU 
	AND t9.date_JUSQUAU >= to_date('2017/12/31','yyyy/mm/dd') 
	AND t2.statutpersonne IN ('ETAM' ,'ETAMA','ETAMB','IAC','IAC1','IAC2' ,'ING')
D'emblée, un truc qui, à mon avis, ne va pas : ON t9.idrp_1 = t8.id AND t9.idrp_2 = t4.idUne jointure se fait entre deux tables et la condition de jointure porte uniquement sur ces deux tables.
La condition t9.idrp_2 = t4.id devrait, à mon avis, être dans le WHERE.

En analysant un peu plus la requête...
1) La table t6 n'est pas utilisée, ni dans le WHERE, ni dans le SELECT. Sa jointure semble donc inutile.
2) Il y a deux instances de la table entreprise et je n'en vois pas bien l'intérêt, dans le cadre de notre première étape qui consiste à trouver les personnes ayant travaillé dans l'entreprise '1234' !
3) Un truc qui m'étonne est la jointure entre personne et entreprise puisqu'il semble que soient enregistrées différentes périodes de travail de personnes dans plusieurs entreprises. Cela veut-il dire qu'il y a dans la table personne l'entreprise dans laquelle la personne se trouve actuellement ?
4) Pourquoi y a t-il des tables archive1 et archive2 d'une part, tablepaiement2 et tablepaiement3 d'autre part ? Ces groupes de tables portent-elles des informations similaires ? les tables du même groupe ont-elles la même structure ? Que stockent ces tables ? Les anciennes entreprises des personnes ? Tout ça me donne l'impression que la BDD a été mal modélisée !
5) Autre chose à éclaircir :
Citation Envoyé par android59
Code : Sélectionner tout - Visualiser dans une fenêtre à part
and t9.date_JUSQUAU <> to_date('2999/12/31','yyyy/mm/dd') --rajout ici ,2999/12/31 veut dire que la personne se trouve toujours dans l'entreprise 1234 aujourd'hui
C'est une nouvelle condition pas abordée jusqu'ici mais, si ma supposition à la fin du 3) est juste, inutile d'aller chercher t9 si l'information se trouve dans personne (t5) !
Dans une autre version de la requête (celle que j'ai mise en forme ici), la condition était AND t9.date_JUSQUAU >= to_date('2017/12/31','yyyy/mm/dd'). Faudrait- préciser le besoin là !
On cherche :
- Les personnes TRAVAILLANT dans l'entreprise '1234' ?
- Ou les personnes AYANT TRAVAILLÉ dans l'entreprise '1234' ?

Si je fais le modèle de données à partir de la requête, voici les liens entre les tables :
personne (t5) : On y SELECT identifiantpersonne
	|
entreprise (t4) : Contient-elle l'entreprise actuelle de la personne ?
	|
archive1 (t3) : Contient-elle les anciennes relations personne-entreprise ?
	|
archive2 (t2) : Que contient-elle ? On y restreint le statut de la personne. cette info ne peut-elle être récupérée ailleurs ?
	|
entreprise (t8) : On y restreint le numéro de l'entreprise dans laquelle a travaillé la personne.
	|
tablerelationent (t9) : On y restreint date_JUSQUAU. C'est la date de fin de contrat ? Pourquoi est-ce dans une table séparée ? "relationent" avec quoi ?

De plus :
archive2 (t2)
	|
Tablepaiement3 (t1) : Pourquoi faut-il passer par cette table pour accéder à t7 ?
	|
tablePaiement2 (t7) : On y restreint dateexercice. C'est la date de début de contrat ?
Vous voyez bien que pour vous aider efficacement, il faut nous décrire les tables utilisées, donner leur structure, exprimer clairement le besoin. Là il y a trop de questions à résoudre.

Ce que je comprends en l'état c'est que les tables archiveX et tablepaiementY contiennent des informations passées et que c'est là-dedans qu'il faut chercher les données.
Dans ce cas, il me semble que l'instance t8 de la table entreprise est suffisante et que la jointure entre personne (t5) et entreprise (t4) est inutile. En effet, s'il y a le statut de la personne dans archive2 (t2), il doit aussi y avoir l'identifiant de la personne que l'on cherche à sélectionner. Et comme t2 est en jointure avec t8, on doit pouvoir trouver un autre cheminement.

A) Quelles sont les personnes ayant travaillé dans l'entreprise 1234 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SELECT DISTINCT t2.identifiantpersonne
FROM archive2 t2
INNER JOIN entreprise t8 ON t8.id = t2.c211_idEnt
WHERE t8.numero_ent= '1234'
B) On restreint au statut des personnes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT DISTINCT t2.identifiantpersonne
FROM archive2 t2
INNER JOIN entreprise t8 ON t8.id = t2.c211_idEnt
WHERE  t8.numero_ent= '1234' 
        AND t2.statutpersonne IN ('ETAM' ,'ETAMA','ETAMB','IAC','IAC1','IAC2' ,'ING')
C) On restreint aux dateexercice :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
SELECT DISTINCT t2.identifiantpersonne
FROM archive2 t2
INNER JOIN entreprise t8 ON t8.id = t2.c211_idEnt
INNER JOIN Tablepaiement3 t1 ON t1.idrefT3 = t2.idrefT3
	INNER JOIN tablePaiement2 t7 ON t1.idrefT7 = t7.id
WHERE  t8.numero_ent= '1234' 
        AND t2.statutpersonne IN ('ETAM' ,'ETAMA','ETAMB','IAC','IAC1','IAC2' ,'ING')
	AND t7.dateexercice >= to_date('2017/01/01','yyyy/mm/dd')
	AND t7.dateexercice <= to_date('2017/12/31','yyyy/mm/dd')
Je laisse de côté pour le moment la condition sur datejusquau, en attendant la précision demandée au point 5.

Bref, lisez et appliquez la phrase en bleu de ma signature, cela vous sera très utile... et à moi aussi pour vous aider efficacement !