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 34 35 36 37 38 39 40 41 42 43 44 45
| CREATE TABLE rubrique
(id_rubrique INT NOT NULL,
libelle VARCHAR(16),
PRIMARY KEY (id_rubrique))
CREATE TABLE categorie
(id_categorie INT NOT NULL,
libelle VARCHAR(16),
PRIMARY KEY (id_categorie))
CREATE TABLE filtre_rubrique
(id_rubrique INT NOT NULL FOREIGN KEY REFERENCES rubrique (id_rubrique),
id_categorie INT NOT NULL FOREIGN KEY REFERENCES categorie (id_categorie),
PRIMARY KEY (id_rubrique, id_categorie))
INSERT INTO rubrique VALUES (1, 'la mécanique')
INSERT INTO rubrique VALUES (2, 'la cuisine')
INSERT INTO categorie VALUES (1, 'Ouvrier')
INSERT INTO categorie VALUES (2, 'Cadre')
INSERT INTO filtre_rubrique VALUES (1,1)
CREATE VIEW rubrique_avec_filtre AS
SELECT r.id_rubrique, c.id_categorie, r.libelle as rubrique, c.libelle as categorie,
CASE
WHEN fr.id_rubrique IS NULL THEN 'NON'
ELSE 'OUI'
END AS FILTRE
FROM rubrique r
CROSS JOIN categorie c
LEFT OUTER JOIN filtre_rubrique fr
ON r.id_rubrique = fr.id_rubrique
AND c.id_categorie = fr.id_categorie
SELECT *
FROM rubrique_avec_filtre
id_rubrique id_categorie rubrique categorie FILTRE
----------- ------------ ---------------- ---------------- ------
1 1 la mécanique Ouvrier OUI
1 2 la mécanique Cadre NON
2 1 la cuisine Ouvrier NON
2 2 la cuisine Cadre NON |
Partager