Maison > base de données > tutoriel mysql > Dois-je stocker les sous-requêtes courantes sous forme de colonnes de table dans PostgreSQL ?

Dois-je stocker les sous-requêtes courantes sous forme de colonnes de table dans PostgreSQL ?

Patricia Arquette
Libérer: 2025-01-11 18:46:42
original
587 Les gens l'ont consulté

Should I Store Common Subqueries as Table Columns in PostgreSQL?

Stocker les requêtes fréquemment utilisées sous forme de colonnes de tableau ?

Requête :

Considérez la requête PostgreSQL suivante :

<code class="language-sql">SELECT <col>, <col>
     , (SELECT sum(<colx>)
        FROM   <othertable> 
        WHERE  <otherforeignkeycol> = <thiskeycol>) AS <col>
FROM   <tbl>;</code>
Copier après la connexion

Cette sous-requête reste la même pour plusieurs requêtes. Est-il possible de stocker cette sous-requête en tant que pseudo-colonne d'une table afin de pouvoir sélectionner facilement une colonne du tableau A qui représente la somme des colonnes du tableau B en fonction d'une relation d'enregistrement ?

Réponse :

1. Vue

Créer une vue est une solution efficace qui vous permet de définir une table virtuelle avec la sous-requête requise comme l'une de ses colonnes.

2. Champs calculés (colonnes générées par le stockage)

Les colonnes générées par le stockage introduites dans PostgreSQL 11 répondent à vos exigences. Ceux-ci vous permettent de définir une colonne calculée dynamiquement en fonction des valeurs d'autres colonnes (y compris les sous-requêtes).

Implémentation à l'aide de champs calculés :

Considérez la forme suivante :

<code class="language-sql">CREATE TABLE tbl_a (a_id int, col1 int, col2 int);
CREATE TABLE tbl_b (b_id int, a_id int, colx int);</code>
Copier après la connexion

Créez un champ calculé à l'aide d'une fonction :

<code class="language-sql">CREATE FUNCTION col3(a_id INT)
  RETURNS int8
  LANGUAGE sql STABLE AS
$func$
SELECT sum(colx)
FROM   tbl_b b
WHERE  b.a_id = 
$func$;</code>
Copier après la connexion

Vous pouvez désormais interroger :

<code class="language-sql">SELECT a_id, col1, col2, col3(a_id)
FROM   tbl_a;</code>
Copier après la connexion

Instructions :

Les champs calculés simulent une sous-requête en fournissant la valeur d'une colonne spécifiée en fonction de la ligne actuelle du tableau. Accédez aux champs calculés à l'aide de la notation attributaire (par exemple, col3(a_id)). Cette technique permet une récupération dynamique des valeurs calculées et maintient la compatibilité avec les requêtes SELECT*. Notez que la définition de la fonction a été modifiée ici, en utilisant a_id directement comme paramètre, évitant ainsi l'utilisation de l'écriture d'enregistrements et simplifiant la requête.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal