Heim >Datenbank >MySQL-Tutorial >Wie kann ich mit einer einzigen Abfrage gleichzeitig Daten in drei Postgres-Tabellen einfügen?
Angenommen, Sie müssen mit einer einzigen Abfrage Daten gleichzeitig in drei Tabellen einfügen. Die Tabellenstruktur ist wie folgt:
<code class="language-sql">CREATE TABLE sample ( id bigserial PRIMARY KEY, lastname varchar(20), firstname varchar(20) ); CREATE TABLE sample1( user_id bigserial PRIMARY KEY, sample_id bigint REFERENCES sample, adddetails varchar(20) ); CREATE TABLE sample2( id bigserial PRIMARY KEY, user_id bigint REFERENCES sample1, value varchar(10) );</code>
Sie müssen den Primärschlüssel für jede Einfügung sicherstellen und ihn dann in nachfolgenden Tabellen verwenden. Das Ausführen einer einzelnen Abfrage für jede Einfügung ermöglicht jedoch keine sofortige Wiederverwendung von Schlüsselwerten.
Um Daten gleichzeitig in drei Tabellen einzufügen, können Sie einen Datenmodifikations-CTE (Common Table Expression) verwenden. Sie stellen Abhängigkeiten zwischen aufeinanderfolgenden Einfügungen her:
<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>
Der erste CTE, ins1, wird in die Beispieltabelle eingefügt und gibt den generierten Schlüssel (sample_id) zurück. Anschließend fügt ins2 mithilfe der Beispiel-ID von ins1 in Beispiel1 ein und gibt die Benutzer-ID zurück. Schließlich fügt der dritte INSERT unter Verwendung der Benutzer-ID in Beispiel2 ein.
In der Regel ist es effizienter, die Datenzeilen im CTE vorher zu definieren:
<code class="language-sql">WITH data(firstname, lastname, adddetails, value) AS ( VALUES ('fai55', 'shaggk', 'ss', 'ss2'), ('fai56', 'XXaggk', 'xx', 'xx2') ) ... -- (查询的其余部分保持不变)</code>
Denken Sie daran, Faktoren wie Eindeutigkeitsbeschränkungen, Typkonvertierungen und die Handhabung gleichzeitiger Schreibvorgänge zu berücksichtigen, um die Datenintegrität sicherzustellen.
Das obige ist der detaillierte Inhalt vonWie kann ich mit einer einzigen Abfrage gleichzeitig Daten in drei Postgres-Tabellen einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!