Heim > Datenbank > MySQL-Tutorial > Wie verhalten sich mehrere Set-Return-Funktionen in der SELECT-Klausel von PostgreSQL in verschiedenen Versionen?

Wie verhalten sich mehrere Set-Return-Funktionen in der SELECT-Klausel von PostgreSQL in verschiedenen Versionen?

Patricia Arquette
Freigeben: 2025-01-17 23:42:09
Original
874 Leute haben es durchsucht

How Do Multiple Set-Returning Functions Behave in PostgreSQL's SELECT Clause Across Different Versions?

PostgreSQLs Umgang mit mehreren Set-Return-Funktionen in SELECT-Anweisungen: Eine versionspezifische Analyse

Das Verhalten von PostgreSQL bei der Begegnung mit mehreren Set-Return-Funktionen innerhalb einer SELECT-Anweisung variiert erheblich je nach Datenbankversion.

PostgreSQL 10 und höher:

In den Versionen 10 und höher werden diese Funktionen synchron ausgeführt. Die Ausgabe ist so strukturiert, dass die Funktion, die die meisten Zeilen erzeugt, die Gesamtzahl der Zeilen im Ergebnissatz vorgibt. Kürzere Funktionsausgaben werden mit NULL-Werten aufgefüllt, um diese Ausrichtung beizubehalten, wodurch effektiv ein Cross-Join-ähnliches Ergebnis entsteht.

PostgreSQL 9.6 und früher:

Vor Version 9.6 unterscheidet sich das Ergebnis erheblich. Die Gesamtzahl der generierten Zeilen entspricht dem kleinsten gemeinsamen Vielfachen (LCM) der Zeilenanzahl aus jeder satzrückgebenden Funktion. Dies kann zu unvorhersehbaren und möglicherweise unerwünschten Ergebnissen führen, insbesondere wenn die Zeilenanzahlen keine gemeinsamen Faktoren aufweisen.

Anschauliches Beispiel:

Lassen Sie uns die Abfrage untersuchen:

<code class="language-sql">SELECT generate_series(1, 3), generate_series(5, 7);</code>
Nach dem Login kopieren

PostgreSQL 10-Ausgabe:

<code> generate_series | generate_series 
-----------------+-----------------
               1 |               5
               2 |               6
               3 |               7
               NULL |               NULL
               NULL |               NULL
               NULL |               NULL</code>
Nach dem Login kopieren

PostgreSQL 9.6- Ausgabe:

<code> generate_series | generate_series 
-----------------+-----------------
               1 |               5
               2 |               6
               3 |               7
               1 |               5
               2 |               6
               3 |               7
               1 |               5
               2 |               6
               3 |               7</code>
Nach dem Login kopieren

Wichtige Überlegungen:

  • PostgreSQL 10 und höher verbieten die Verwendung von Set-Return-Funktionen innerhalb von CASE- und COALESCE-Ausdrücken.
  • Für eine bessere Kontrolle und vorhersehbare Ergebnisse wird dringend empfohlen, LATERAL JOIN mit ROWS FROM (...) zu verwenden, anstatt mehrere Satzrückgabefunktionen direkt in die SELECT-Liste aufzunehmen.

Relevante Dokumentation:

Das obige ist der detaillierte Inhalt vonWie verhalten sich mehrere Set-Return-Funktionen in der SELECT-Klausel von PostgreSQL in verschiedenen Versionen?. 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