Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine Set-Return-Funktion mit einem Array-Argument in PostgreSQL effizient mehrmals aufrufen?

Wie kann ich eine Set-Return-Funktion mit einem Array-Argument in PostgreSQL effizient mehrmals aufrufen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-26 12:32:10895Durchsuche

How Can I Efficiently Call a Set-Returning Function with an Array Argument Multiple Times in PostgreSQL?

Mehrmaliges Aufrufen einer Mengenrückgabefunktion mit einem Array-Argument

Diese Diskussion dreht sich um eine Mengenrückgabefunktion namens foo, die verarbeiten kann Ein Array von Daten, das einen bestimmten Parameter verwendet und ein Ergebnis liefert, das eine Reihe von Zeilen und eine zusätzliche Spalte enthält. Während die Funktion erfolgreich mit einem einzelnen Datensatz funktioniert, stößt sie auf Herausforderungen, wenn versucht wird, mehrere Datensätze zu verarbeiten, ohne sich für die Referenzierung auf eine Daten-ID zu verlassen.

Verschiedene Versuche, die Syntax zu ändern, z. B. die Verwendung des folgenden Formats:

SELECT dataid, (foo(ARRAY_AGG(data)),1).*
FROM dataset
WHERE dataid = something -- only testing on 1
GROUP BY dataid

war nicht erfolgreich, was dazu führte, dass die Funktion für jede Spalte wiederholt aufgerufen wurde.

Lösung: Lateral Join

In PostgreSQL-Versionen 9.3 und höher führt die Verwendung eines LEFT JOIN LATERAL-Konstrukts normalerweise zu optimalen Ergebnissen:

SELECT sub.dataid, f.*
FROM (
   SELECT dataid, array_agg(data) AS arr
   FROM dataset
   WHERE dataid = something
   GROUP BY 1
   ) sub
LEFT JOIN LATERAL foo(sub.arr) f ON true;

Diese Syntax stellt sicher, dass alle Zeilen links vom Join bleiben erhalten, auch wenn die Funktion foo keine Zeilen zurückgibt.

Wenn foo kann Wenn tatsächlich keine Zeilen zurückgegeben werden und der Ausschluss dieser Zeilen erwünscht ist, kann die folgende Syntax verwendet werden:

CROSS JOIN LATERAL foo(sub.arr)

oder ihre Kurzversion:

, foo(sub.arr)

Dieser Ansatz ist im PostgreSQL-Handbuch dokumentiert.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Set-Return-Funktion mit einem Array-Argument in PostgreSQL effizient mehrmals aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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