[gelöst] SQL Befehl Insert mit select?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1651
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

[gelöst] SQL Befehl Insert mit select?

Beitrag von fliegermichl »

Hallo,

meine Frage hat zwar nicht direkt mit Lazarus zu tun, aber da wir ja hier auch einige Datenbankspezialisten haben, stelle ich sie trotzdem mal hier.
Ich habe eine Tabelle Produkt, eine Module und eine Produktmodule.

Jedes Produkt hat eine Id und eine Bezeichnung. Genauso ist das bei den Modulen.
Da aber nicht jedes Modul zu jedem Produkt passt, gibt es die Zuordnungstabelle Produktmodule in der jede ModulId zu den passenden Produkten verknüpft ist.

Wenn jetzt ein neues Modul hinzukommt, dann habe ich dieses bei den Modulen angelegt und dann die Zuordnung zu jedem passenden Produkt händisch eingefügt.
Kann man ein kombiniertes select und insert Statement erstellen in der Form
Gib mir alle Produkte die zu Modul 4 passen und lege gleichzeitig eine Verknüpfung mit diesen ProduktIds mit Modul 13 an?
Zuletzt geändert von fliegermichl am So 26. Mai 2024, 13:14, insgesamt 1-mal geändert.

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: SQL Befehl Insert mit select?

Beitrag von Socke »

fliegermichl hat geschrieben: So 26. Mai 2024, 11:59 Gib mir alle Produkte die zu Modul 4 passen und lege gleichzeitig eine Verknüpfung mit diesen ProduktIds mit Modul 13 an?
Hängt ein wenig von der Datenbank ab, aber die meisten unterstützen das Einfügen eines SELECT-Ergebnisses, z.B. SQlite3. Die Spalten des SELECT-Ergebnisses müssen natürlich zu der Tabelle passen, in die sie eingefügt werden sollen.

Hier ein Beispiel mir Parametern:

Code: Alles auswählen

-- Tabelle definieren
CREATE TABLE "Produktmodule" (
	"ProduktID" INTEGER,
	"ModulID" INTEGER,
	PRIMARY KEY ("ProduktID", "ModulID")
);
-- Verknüpfungen zu allen Produkten für ein neues Modul einfügen, welches kompatbibel zu einem bisherigen Modul ist
INSERT INTO "Produktmodule" SELECT "ProduktID", :NeueModulID FROM "Produktmodule" WHERE "ModulID" = :KompatibleModulID;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1651
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: SQL Befehl Insert mit select?

Beitrag von fliegermichl »

Ah Danke.

Ganz genauso hat es nicht geklappt aber wenn man die Spaltennamen mit angibt, dann geht es. (MySql)

Code: Alles auswählen

insert into produktmodule (produktid, modulid) select produktid, 31 from produktmodule where modulid = 1
Da kam dann die Meldung "inserted 18 rows"

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: [gelöst] SQL Befehl Insert mit select?

Beitrag von Socke »

Die Details hängen dann immer ein wenig von der Datenbank ab, was sie haben will und auch ob es noch weitere Felder in deiner Zieltabelle gibt, die mit Standardwerten gefüllt werden sollen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten