Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/09/2006, 17h59   #1
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Par défaut jointure externe et renvoi de valeurs NULL

Bonjour,

J'ai créé 4 tables :

Code :
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 :
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
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2006, 18h52   #2
Membre Expert
 
Avatar de TheLeadingEdge
 
Inscription : mai 2005
Messages : 1 200
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 1 200
Points : 1 260
Points : 1 260
Bonjour,

Citation:
Envoyé par ctobini
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 :
[...]INNER JOIN[...]
Ne me renvoi que les lignes qui sont totalement jointes.
Sauriez vous comment faire en sorte que les lignes NULL me soient renvoyées ?
Dans ton cas remplacer INNER JOIN par LEFT OUTER JOIN devrait résoudre ton problème.
TheLeadingEdge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2006, 10h57   #3
Membre régulier
 
Inscription : avril 2004
Messages : 284
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 284
Points : 75
Points : 75
Bonjour et merci de la réponse,

J'ai bien remplacer le INNER JOIN par LEFT OUTER JOIN et ça marche à merveille !

Merci encore et bonne journée,

C. Tobini
ctobini est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h09.


 
 
 
 
Partenaires

Hébergement Web