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>
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>
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>
Jetzt können Sie abfragen:
<code class="language-sql">SELECT a_id, col1, col2, col3(a_id) FROM tbl_a;</code>
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!