Bonjour,
J'ai créé 4 tables :
La table gids est forcément renseignée, en revanche, les attributs symb et descr peuvent ne pas exister et de ce fait ils peuvent manquer dans la tables symbole_description.
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 description( -- Attributes -- descr_id SERIAL, descr TEXT UNIQUE, CONSTRAINT descr_pk PRIMARY KEY (descr_id) ); CREATE TABLE symbole( -- Attributes -- symb_id SERIAL, symb TEXT UNIQUE, CONSTRAINT symb_id PRIMARY KEY (symb_id) ); CREATE TABLE gids( -- Attributes -- gid_id INTEGER UNIQUE NOT NULL, hugo TEXT, descr TEXT, chrs TEXT, fam TEXT, compt SERIAL, CONSTRAINT gid_pk PRIMARY KEY (gid_id) ) ; CREATE TABLE symbole_description( -- Attributes -- gid_id INTEGER, symb_id INTEGER, descr_id INTEGER, chrs TEXT, compt SERIAL, CONSTRAINT symb_fk FOREIGN KEY (symb_id) REFERENCES symbole (symb_id) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT descr_fk FOREIGN KEY (descr_id) REFERENCES description (descr_id) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT gid_fk FOREIGN KEY (gid_id) REFERENCES gids (gid_id) ON UPDATE CASCADE ON DELETE CASCADE );
J'ai lu dans le livre sur Postgresql que j'ai acheté que les jointure exernes peuvent ne pas renvoyer les lignes et renvoyer une valeur NULL, ce que je voudrais faire, or, une commande du style :
Ne me renvoi que les lignes qui sont totalement jointes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select g.gid_id, s.symb, s.symb_id, d.descr, d.descr_id, sd.gid_id, sd.symb_id, sd.descr_id from gids as g INNER JOIN symbole_description as sd on (sd.gid_id = g.gid_id) INNER JOIN symbole as s on (s.symb_id = sd.symb_id) INNER JOIN description as d on (d.descr_id = sd.descr_id);
Sauriez vous comment faire en sorte que les lignes NULL me soient renvoyées ?
En vous remerciant,
C. Tobini
Partager