Bonjour,

J'ai créé 4 tables :

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 );
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.

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 :

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);
Ne me renvoi que les lignes qui sont totalement jointes.

Sauriez vous comment faire en sorte que les lignes NULL me soient renvoyées ?

En vous remerciant,

C. Tobini