Bonjour.

Soit une population d'individus. Il y a les internes, qui font partie d'un organisme (société, entreprise, administration, c'est sans importance) et les externes, qui sont des vacataires en partenariat avec des internes pour des missions temporaires.

- 1 interne peut avoir 0 ou 1 externe à la fois. Une date de début et de fin sont précisées à cet effet.
- 1 externe (qui n'existe que si il est missionné au moins 1 fois) peut être en partenariat avec 1 ou plusieurs internes, simultanément.

Voici la structure et un petit jeu de données :

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CREATE TABLE T_INDIVIDUS (
	IND_ID INTEGER GENERATED BY DEFAULT AS IDENTITY,
	IND_NOM VARCHAR (50) NOT NULL,
	IND_PRENOM VARCHAR (50) NOT NULL,
	CONSTRAINT PK_IND_ID PRIMARY KEY (IND_ID)
);
 
CREATE TABLE T_PARTENARIATS (
	IND_INT_ID INTEGER,
	IND_EXT_ID INTEGER NOT NULL,
	PAR_DATE_DEB DATE,
	PAR_DATE_FIN DATE,
	CONSTRAINT PK_IND_PAR PRIMARY KEY (IND_INT_ID, PAR_DATE_DEB),
	CONSTRAINT FK_IND_INT_ID FOREIGN KEY (IND_INT_ID) REFERENCES T_INDIVIDUS (IND_ID),
	CONSTRAINT FK_IND_EXT_ID FOREIGN KEY (IND_EXT_ID) REFERENCES T_INDIVIDUS (IND_ID)
);
 
INSERT INTO T_INDIVIDUS (IND_ID, IND_NOM, IND_PRENOM) VALUES (1, 'Talbot', 'Maribelle');
INSERT INTO T_INDIVIDUS (IND_ID, IND_NOM, IND_PRENOM) VALUES (2, 'Vidal', 'Pierre');
INSERT INTO T_INDIVIDUS (IND_ID, IND_NOM, IND_PRENOM) VALUES (3, 'Nemours', 'Doralice');
INSERT INTO T_INDIVIDUS (IND_ID, IND_NOM, IND_PRENOM) VALUES (4, 'Grimaud', 'Sarah');
INSERT INTO T_INDIVIDUS (IND_ID, IND_NOM, IND_PRENOM) VALUES (5, 'Vassent', 'David');
INSERT INTO T_INDIVIDUS (IND_ID, IND_NOM, IND_PRENOM) VALUES (6, 'Carpentier', 'Thomas');
INSERT INTO T_INDIVIDUS (IND_ID, IND_NOM, IND_PRENOM) VALUES (7, 'Lefort', 'Julie');
INSERT INTO T_INDIVIDUS (IND_ID, IND_NOM, IND_PRENOM) VALUES (8, 'Jodel', 'Karine');
INSERT INTO T_INDIVIDUS (IND_ID, IND_NOM, IND_PRENOM) VALUES (9, 'Montepin', 'Victor');
INSERT INTO T_INDIVIDUS (IND_ID, IND_NOM, IND_PRENOM) VALUES (10, 'Lasalle', 'Anne-Marie');
 
INSERT INTO T_PARTENARIATS (IND_INT_ID, IND_EXT_ID, PAR_DATE_DEB, PAR_DATE_FIN) VALUES (1, 5, '2025-02-15', '2025-03-07');
INSERT INTO T_PARTENARIATS (IND_INT_ID, IND_EXT_ID, PAR_DATE_DEB, PAR_DATE_FIN) VALUES (7, 8, '2025-03-27', NULL);
INSERT INTO T_PARTENARIATS (IND_INT_ID, IND_EXT_ID, PAR_DATE_DEB, PAR_DATE_FIN) VALUES (2, 10, '2025-04-02', '2025-04-29');
INSERT INTO T_PARTENARIATS (IND_INT_ID, IND_EXT_ID, PAR_DATE_DEB, PAR_DATE_FIN) VALUES (6, 10, '2025-04-18', '2025-04-24');
INSERT INTO T_PARTENARIATS (IND_INT_ID, IND_EXT_ID, PAR_DATE_DEB, PAR_DATE_FIN) VALUES (6, 8, '2025-04-30', NULL);
Je pense que la structure est correcte (association réflexive) mais je n'en suis pas certain.

Ce sujet porte sur une chose que je ne parviens pas à faire : une requête, qui affiche le nom des internes et de leurs externes, uniquement pour les partenariats en cours (date de fin NULL). Soit pour ce jeu de données :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
| IND_INTERNE       | IND_EXTERNE  | PAR_DATE_DEBUT |
| ----------------- | ------------ | -------------- |
| Lefort Julie      | Jodel Karine | 2025-03-27     |
| Carpentier Thomas | Jodel Karine | 2025-04-30     |
Merci.