Heim > Datenbank > MySQL-Tutorial > Sollte ich allgemeine Unterabfragen als Tabellenspalten in PostgreSQL speichern?

Sollte ich allgemeine Unterabfragen als Tabellenspalten in PostgreSQL speichern?

Patricia Arquette
Freigeben: 2025-01-11 18:46:42
Original
587 Leute haben es durchsucht

Should I Store Common Subqueries as Table Columns in PostgreSQL?

Häufig verwendete Abfragen als Tabellenspalten speichern?

Abfrage:

Betrachten Sie die folgende PostgreSQL-Abfrage:

<code class="language-sql">SELECT <col>, <col>
     , (SELECT sum(<colx>)
        FROM   <othertable> 
        WHERE  <otherforeignkeycol> = <thiskeycol>) AS <col>
FROM   <tbl>;</code>
Nach dem Login kopieren

Diese Unterabfrage bleibt bei mehreren Abfragen gleich. Ist es möglich, diese Unterabfrage als Pseudospalte einer Tabelle zu speichern, sodass ich auf einfache Weise eine Spalte in Tabelle A auswählen kann, die die Summe der Spalten in Tabelle B basierend auf einer Datensatzbeziehung darstellt?

Antwort:

1. Anzeigen

Das Erstellen einer Ansicht ist eine effiziente Lösung, mit der Sie eine virtuelle Tabelle mit der erforderlichen Unterabfrage als eine ihrer Spalten definieren können.

2. Berechnete Felder (speichergenerierte Spalten)

Die in PostgreSQL 11 eingeführten speichergenerierten Spalten erfüllen Ihre Anforderungen. Damit können Sie eine Spalte definieren, die basierend auf den Werten anderer Spalten (einschließlich Unterabfragen) dynamisch berechnet wird.

Implementierung mithilfe berechneter Felder:

Betrachten Sie das folgende Formular:

<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>
Nach dem Login kopieren

Erstellen Sie ein berechnetes Feld mit einer Funktion:

<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>
Nach dem Login kopieren

Jetzt können Sie abfragen:

<code class="language-sql">SELECT a_id, col1, col2, col3(a_id)
FROM   tbl_a;</code>
Nach dem Login kopieren

Anleitung:

Berechnete Felder simulieren eine Unterabfrage, indem sie den Wert einer angegebenen Spalte basierend auf der aktuellen Zeile in der Tabelle bereitstellen. Greifen Sie mithilfe der Attributnotation auf berechnete Felder zu (z. B. col3(a_id)). Diese Technik ermöglicht den dynamischen Abruf berechneter Werte und gewährleistet die Kompatibilität mit SELECT*-Abfragen. Beachten Sie, dass die Funktionsdefinition hier geändert wurde und a_id direkt als Parameter verwendet wird, wodurch das Schreiben von Datensätzen vermieden und die Abfrage vereinfacht wird.

Das obige ist der detaillierte Inhalt vonSollte ich allgemeine Unterabfragen als Tabellenspalten in PostgreSQL speichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage