salut les amis
j'ai 3 tables :
client
dossier_client
dossier
et je veux faire une jointure et récupérer tout les clients même ceux qui n'ont pas de dossier (pas de dossier_client)








salut les amis
j'ai 3 tables :
client
dossier_client
dossier
et je veux faire une jointure et récupérer tout les clients même ceux qui n'ont pas de dossier (pas de dossier_client)
Je te conseille de regarder les tuto sur les jointures externes.
Il n'y a strictement aucune difficulté dans ce que tu veux faire, purement de la base en SQL...
Je parie que les trois quarts des développeurs ne savent pas écrire cette requête.
yous18, qu'avez-vous commencé à écrire à l'aide du tutoriel fourni par lola06 ?
75% je me demande même si je ne suis pas trop optimiste !
Ceux qui doutent, vous pouvez m'envoyer un MP.
Pour la syntaxe :
client (id_client, nom_client)
dossier (id_dossier, nom dossier)
dossier_client (id_dossier, id_client)
Avec les PK en gras, les FK en souligné, et les index qui vont bien.
Un petit jeu de test :
Faut arriver à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 WITH client AS (SELECT ROWNUM id_client, 'Client '|| ROWNUM nom_client FROM user_tables WHERE ROWNUM < 5), dossier AS (SELECT ROWNUM id_dossier, 'Dossier '|| ROWNUM nom_dossier FROM user_tables WHERE ROWNUM < 10), dossier_client AS (SELECT 1 id_dossier, 1 id_client FROM dual UNION ALL SELECT 2, 1 FROM dual UNION ALL SELECT 2, 2 FROM dual UNION ALL SELECT 4, 4 FROM dual ) SELECT ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ID_CLIENT NOM_CLIENT ID_DOSSIER NOM_DOSSIER 1 Client 1 1 Dossier 1 1 Client 1 2 Dossier 2 2 Client 2 2 Dossier 2 3 Client 3 4 Client 4 4 Dossier 4
Je parie que les trois quarts des développeurs ne savent pas écrire cette requête.
Il n'y a pas vraiment de difficultés flagrantes tout de même, juste un piège dans lequel il ne faut pas tomber![]()








Le gars ne sait pas, alors il demande.
ANSI Syntax:
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 WITH client AS ( SELECT ROWNUM AS id_client, 'Client '|| ROWNUM AS nom_client FROM all_tables WHERE ROWNUM < 5 ), dossier AS ( SELECT ROWNUM id_dossier, 'Dossier '|| ROWNUM nom_dossier FROM all_tables WHERE ROWNUM < 10 ), dossier_client AS ( SELECT 1 AS id_dossier, 1 AS id_client FROM dual UNION ALL SELECT 2, 1 FROM dual UNION ALL SELECT 2, 2 FROM dual UNION ALL SELECT 4, 4 FROM dual ) -- fin données de test -- -- SELECT c.id_client, c.nom_client, dc.id_dossier, d.nom_dossier FROM client c LEFT JOIN dossier_client dc ON c.id_client = dc.id_client LEFT JOIN dossier d ON d.id_dossier = dc.id_dossier ORDER BY 1;
"Vieille" syntaxe Oracle:
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 WITH client AS ( SELECT ROWNUM AS id_client, 'Client '|| ROWNUM AS nom_client FROM all_tables WHERE ROWNUM < 5 ), dossier AS ( SELECT ROWNUM id_dossier, 'Dossier '|| ROWNUM nom_dossier FROM all_tables WHERE ROWNUM < 10 ), dossier_client AS ( SELECT 1 AS id_dossier, 1 AS id_client FROM dual UNION ALL SELECT 2, 1 FROM dual UNION ALL SELECT 2, 2 FROM dual UNION ALL SELECT 4, 4 FROM dual ) -- fin données de test -- -- SELECT c.id_client, c.nom_client, dc.id_dossier, d.nom_dossier FROM client c, dossier_client dc, dossier d WHERE c.id_client = dc.id_client (+) AND d.id_dossier(+) = dc.id_dossier ORDER BY 1;
Partager