PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 20/02/2022 00:41:59

Olivier C
Membre

Regrouper plusieurs requêtes

Bonsoir à tous,

Je suis novice sous PostgreSQL et en SQL en général. Je m'inscris ce jour sur ce forum pour vous poser ma première question :

Comment faire pour avoir toutes les données liées à mon article (table __post) - ce que fait la requête ci-dessous - avec en bonus le nom de l'auteur présent sur la table __person ?

SELECT * FROM __post WHERE _id = 1;

Les tables concernées :

CREATE TABLE __post (
  _id                 BIGSERIAL         NOT NULL,
  _name               VARCHAR(255)      NOT NULL,                  -- titre
  _content            TEXT              NULL,                      -- contenu
  _creation           TIMESTAMP         DEFAULT CURRENT_TIMESTAMP, -- date de création -- DEFAULT CURRENT_DATE
  _revision           TIMESTAMP         NULL,                      -- date de révision
  _type               VARCHAR(255)      NULL,                      -- article, page, etc...
  _slug               VARCHAR(255)      NULL,                      -- slug propre à l'article, différent de l'url canonique, celle-ci étant reconstituée à partir le l'index par exemple
  _description        VARCHAR           NULL,                      -- contenu utilisé pour la balise meta description
  _author_id          BIGINT            NOT NULL,                  -- créateur du post (contributeur principal)
  _status             SMALLINT          NOT NULL,                  -- publié, brouillon, refusé, poubelle
  _comments_status    BOOLEAN           NULL,                      -- commentaires activés ou non
  _keywords           VARCHAR(255)      NULL,                      -- mots-clefs pour le post
  _medias             VARCHAR(255)      NULL,                      -- medias en lien avec le post
  CONSTRAINT __post_pkey PRIMARY KEY (_id),
  CONSTRAINT __author_id__person_fkey FOREIGN KEY (_author_id) REFERENCES __person(_id)
);
CREATE TABLE __person (
  _id                 BIGSERIAL         NOT NULL,
  _user_id            BIGINT            NULL,                      -- référence éventuelle à __account
  _sexe               CHAR(1)           NULL,                      -- selon la norme ISO/IEC 5218 ; inconnu : 0, homme : 1, femme : 2, non applicable : 9
  _given_name         VARCHAR(32)       NULL,                      -- prénom
  _additional_name    VARCHAR(32)       NULL,                      -- deuxième prénom
  _family_name        VARCHAR(32)       NULL,                      -- nom de famille
  _usual_name         VARCHAR(32)       NULL,                      -- nom d'usage, nom d'épouse
  _nickname           VARCHAR(32)       NULL,                      -- surnom
  _prefix             VARCHAR(32)       NULL,                      -- titres et civilité
  _suffix             VARCHAR(32)       NULL,                      -- abréviation typographique postname (ex : s.j., o.p.)
  _birth_date         DATE              NULL,                      -- date de naissance
  -- [etc, je simplifie un peu, ici c'est pour l'exemple...]
  _description        TEXT              NULL,                      -- 800 caractères max
  CONSTRAINT __person_pkey PRIMARY KEY (_id)
);

Merci de votre attention.

Dernière modification par Olivier C (20/02/2022 00:43:17)

Hors ligne

#2 20/02/2022 19:59:23

gleu
Administrateur

Re : Regrouper plusieurs requêtes

Vous faîtes ce qu'on appelle une jointure comme expliquée dans https://docs.postgresql.fr/14/queries-t … ERIES-JOIN


Guillaume.

Hors ligne

#3 20/02/2022 20:01:33

Re : Regrouper plusieurs requêtes

Bonjour,

Olivier C a écrit :

Comment faire pour avoir toutes les données liées à mon article (table __post) - ce que fait la requête ci-dessous - avec en bonus le nom de l'auteur présent sur la table __person ?

Il faut faire ce qu'on appelle une "jointure".

https://sql.sh/cours/jointures

Edit : Ooops devancé ;-)

Dernière modification par herve.lefebvre (20/02/2022 20:03:19)

Hors ligne

#4 20/02/2022 22:27:13

Olivier C
Membre

Re : Regrouper plusieurs requêtes

Oui, mais comment procéder concrètement ? Autrement dit comment concilier les deux requêtes qui suivent afin qu'elles n'en fassent qu'une seule ?

-- Sélectionner l'article avec l'ID n°1 :
SELECT * FROM __post WHERE _id = 1;

-- Sélectionner l'auteur de ce même article :
SELECT __person._given_name, __person._family_name
FROM __post
INNER JOIN __person
ON __post._author_id = __person._id AND __post._id = 1;

Dernière modification par Olivier C (20/02/2022 22:27:35)

Hors ligne

#5 21/02/2022 00:55:34

Olivier C
Membre

Re : Regrouper plusieurs requêtes

Bonsoir,
Depuis mon dernier post quelqu'un m'a donné la solution, j'étais encore loin du compte :

SELECT __post.*, __person._given_name, __person._family_name
FROM __post
INNER JOIN __person ON __post._author_id = __person._id 
WHERE __post._id = 1;

Merci pour vos suggestions. Bonne soirée.

Hors ligne

Pied de page des forums