Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe von CTEs oder einer temporären Tabelle nacheinander Daten in mehrere Postgres-Tabellen einfügen?

Wie kann ich mithilfe von CTEs oder einer temporären Tabelle nacheinander Daten in mehrere Postgres-Tabellen einfügen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-12 14:35:47771Durchsuche

How Can I Sequentially Insert Data into Multiple Postgres Tables Using CTEs or a Temporary Table?

Verwendung von Postgres CTE zum sequenziellen Einfügen von Daten in mehrere Tabellen

In Postgres können Sie datenmodifizierende allgemeine Tabellenausdrücke (CTE) verwenden, um Daten mit einer einzigen Abfrage in mehrere Tabellen einzufügen. CTE bietet eine praktische Möglichkeit, temporäre Ergebnismengen zu definieren und Daten in einer einzigen Abfrage zu bearbeiten.

Verwenden Sie Daten, um den CTE zu ändern

Die folgende Abfrage zeigt, wie CTE zum sequentiellen Einfügen von Daten in drei Tabellen verwendet wird:

<code class="language-sql">WITH ins1 AS (
   INSERT INTO sample(firstname, lastname)
   VALUES ('fai55', 'shaggk')
   RETURNING id AS sample_id
   ), ins2 AS (
   INSERT INTO sample1 (sample_id, adddetails)
   SELECT sample_id, 'ss' FROM ins1
   RETURNING user_id
   )
INSERT INTO sample2 (user_id, value)
SELECT user_id, 'ss2' FROM ins2;</code>

In dieser Abfrage:

  • Der erste CTE, ins1, fügt eine Zeile in die Tabelle sample ein und gibt die ID der eingefügten Zeile als sample_id zurück.
  • Der zweite CTE, ins2, verwendet das von ins1 zurückgegebene sample_id, um eine Zeile in die sample1-Tabelle einzufügen. Es gibt das user_id der eingefügten Zeile zurück.
  • Die letzte INSERT-Anweisung fügt mithilfe des von ins2 zurückgegebenen user_id eine Zeile in die sample2-Tabelle ein.

Mit diesem Ansatz können Sie mehrere INSERT-Anweisungen verketten und von vorherigen Einfügungen zurückgegebene Werte wiederverwenden.

Verarbeitung gleichzeitiger Schreibvorgänge

Wenn mehrere Sitzungen gleichzeitig Daten einfügen, müssen Sie die Möglichkeit gleichzeitiger Schreibvorgänge in Betracht ziehen. Dazu können Sie die ON CONFLICT-Klausel verwenden, um das Verhalten beim Versuch, einen doppelten Datensatz einzufügen, festzulegen.

Alternativen mit temporären Tabellen

Alternativ zur Verwendung von CTE können Sie auch eine temporäre Tabelle erstellen, um die Zwischendaten zu speichern, und dann die Einfügungen nacheinander durchführen:

<code class="language-sql">CREATE TEMP TABLE tmp AS SELECT * FROM sample;
INSERT INTO sample1 (sample_id, adddetails) SELECT id, 'ss' FROM tmp;
INSERT INTO sample2 (user_id, value) SELECT user_id, 'ss2' FROM tmp;
DROP TABLE tmp;</code>

Bei diesem Ansatz wird eine temporäre Tabelle als Datenquelle für nachfolgende Einfügungen verwendet, ohne den CTE direkt zu verknüpfen.

Durch die Verwendung eines Datenänderungs-CTE oder einer temporären Tabelle können Sie Daten mit einer einzigen Postgres-Abfrage effizient in mehrere Tabellen einfügen und so die Dateneinfügungsvorgänge vereinfachen.

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von CTEs oder einer temporären Tabelle nacheinander Daten in mehrere Postgres-Tabellen einfügen?. 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