Bonsoir,
Almenor, je subodore que vous utilisez ACCESS, car vos jointures internes et externes sont noyées dans un protocole imposé mais inutile et stupide d’emboîtement à coups de parenthèses, ce qui complique singulièrement la tâche du développeur.
Avec ACCESS, histoire d’éviter les migraines, pour ma part je programme comme on le faisait dans les années quatre-vingts, quatre-vingt-dix. Exemple développé avec MySQL, mais dont vous pouvez vous inspirer :
use temp ;
DROP TABLE IF EXISTS CY_CONT ;
DROP TABLE IF EXISTS CONT ;
DROP TABLE IF EXISTS CY ;
CREATE TABLE CY
(
ID_COMPANY INT NOT NULL
, NAME VARCHAR(32) NOT NULL
, CONSTRAINT CY_PK PRIMARY KEY (ID_COMPANY)
) ;
INSERT INTO CY (ID_COMPANY, NAME) VALUES
(1, 'Dubicobit'), (2, 'Yadupour associés'), (3, 'Schmoll & Co'), (4, 'Volfoni Frères'), (5, 'Etablissements Naudin')
;
CREATE TABLE CONT
(
ID_CONTACT INT NOT NULL
, NAME VARCHAR(32) NOT NULL
, CONSTRAINT CONT_PK PRIMARY KEY (ID_CONTACT)
) ;
INSERT INTO CONT (ID_CONTACT, NAME) VALUES
(1, 'Fernand'), (2, 'Raoul'), (3, 'Paul'), (4, 'Antoine'), (5, 'Patricia')
;
CREATE TABLE CY_CONT
(
ID_COMPANY INT NOT NULL
, ID_CONTACT INT NOT NULL
, CONSTRAINT CY_CONT_PK PRIMARY KEY (ID_COMPANY, ID_CONTACT)
, CONSTRAINT CY_CONT_CY_FK FOREIGN KEY (ID_COMPANY) REFERENCES CY (ID_COMPANY)
, CONSTRAINT CY_CONT_CONT_FK FOREIGN KEY (ID_CONTACT) REFERENCES CONT (ID_CONTACT)
) ;
INSERT INTO CY_CONT (ID_COMPANY, ID_CONTACT) VALUES
(5, 1), (4, 2), (4, 3)
;
SELECT CY.NAME, CONT.NAME
FROM CY, CONT, CY_CONT
WHERE CY.ID_COMPANY = CY_CONT.ID_COMPANY
AND CY_CONT.ID_CONTACT = CONT.ID_CONTACT
UNION ALL
SELECT CY.NAME, 'société sans contact'
FROM CY
WHERE NOT EXISTS
(SELECT ''
FROM CY_CONT
WHERE CY.ID_COMPANY = CY_CONT.ID_COMPANY)
UNION ALL
SELECT CONT.NAME, 'contact sans société'
FROM CONT
WHERE NOT EXISTS
(SELECT ''
FROM CY_CONT
WHERE CONT.ID_CONTACT = CY_CONT.ID_CONTACT)
;
=>
Societe NomContact
--------------------- --------------------
Etablissements Naudin Fernand
Volfoni Frères Raoul
Volfoni Frères Paul
Dubicobit société sans contact
Yadupour associés société sans contact
Schmoll & Co société sans contact
Antoine contact sans société
Patricia contact sans société
Partager