Heim > Datenbank > MySQL-Tutorial > Warum werden die zurückgegebenen Spalten meiner Funktion in meiner PostgreSQL-Abfrage verkettet?

Warum werden die zurückgegebenen Spalten meiner Funktion in meiner PostgreSQL-Abfrage verkettet?

Susan Sarandon
Freigeben: 2024-12-26 13:27:11
Original
683 Leute haben es durchsucht

Why Are My Function's Returned Columns Concatenated in My PostgreSQL Query?

Von der Funktion zurückgegebener Datensatz zeigt verkettete Spalten: Ursache aufklären

In einer Abfrage Tabellen verknüpfen und historische Daten von einer Funktion abrufen, Benutzer Möglicherweise tritt ein Problem auf, bei dem von der Funktion zurückgegebene Spalten zu einer einzigen Zeichenfolge verkettet erscheinen. Diese Anomalie tritt auf, wenn die Funktion direkt in der Hauptabfrage verwendet wird.

Verstehen des Problems

Beim Abfragen einer Funktion, die mehrere Spalten zurückgibt, wie zum Beispiel:

account_servicetier_for_day(acct.accountid, '2014-08-12')
Nach dem Login kopieren

es gibt einen Datensatz zurück, der die angeforderten Daten enthält. Wenn dieser Datensatz jedoch in eine andere Abfrage eingebettet ist, interpretiert PostgreSQL ihn als einzelne verkettete Zeichenfolge.

Funktionsausgabe zerlegen

Um dies zu beheben, sollten Benutzer die Person extrahieren Spalten aus dem Datensatz der Funktion. In PostgreSQL-Versionen 9.3 und höher kann dies mithilfe der JOIN LATERAL-Syntax erreicht werden, die eine nahtlose Integration von Funktionen in die FROM-Klausel ermöglicht:

JOIN LATERAL account_servicetier_for_day(a.accountid, '2014-08-12') f ON TRUE
Nach dem Login kopieren

Die ON TRUE-Klausel stellt sicher, dass alle Zeilen von links Tabelle werden mit dem Ergebnis der Funktion verknüpft, unabhängig von der Anzahl der zurückgegebenen Zeilen.

In PostgreSQL 9.2 und früher erfordert das Extrahieren von Spaltendaten eine explizite Unterabfrage:

(SELECT *, account_servicetier_for_day(a.accountid, '2014-08-12') AS rec
   FROM account_tab a) AS a
Nach dem Login kopieren

Hier weist die Unterabfrage das Ergebnis des Funktionsaufrufs einem Datensatz namens rec zu. Die äußere Abfrage kann sich dann auf die Spalten des Datensatzes beziehen, z. B. a.rec.timestamp.

Not In (Unterabfrage) vermeiden

Zuletzt wird empfohlen, die Verwendung zu vermeiden NOT IN (Unterabfrage) für Satzausschluss. Bevorzugen Sie stattdessen die NOT EXISTS-Klausel, die effizienter und weniger anfällig für Leistungsprobleme ist.

Das obige ist der detaillierte Inhalt vonWarum werden die zurückgegebenen Spalten meiner Funktion in meiner PostgreSQL-Abfrage verkettet?. 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