INSERT INTO mit SELECT für FK

darkie_max

Grünschnabel
Hi,
ich habe 2 Tabellen z.B.:

Mitarbeiter: MitarbeiterID (PK), FirmaID (FK), Name
Firma: FirmaID (PK), Firmenname

Die Primärschlüssel sind generierte Kunstschlüssel.

Jetzt möchte ich z.B. einen neuen Mitarbeiter der Firma mit dem Firmennamen 'XYZ' hinzufügen d.h. den Firmennamen kenne ich, aber die FirmaID erstmal nicht. Natürlich kann ich die mit einer SELECT Abfrage herausbekommen, aber wie mache ich das in meinem INSERT... ?

INSERT INTO Mitarbeiter (FirmaID, Name)
VALUES
( SELECT FirmaID FROM Firma WHERE Firmenname='XYZ' , 'Müller');

Sieht nett aus... geht aber nicht... aber sowas in der Art müsste es doch geben oder?

Danke

Gruß

Maxi
 
Wüsste jetzt nicht, wie das in einem Zuge funktionieren sollte?!

Zunächst wirst Du ja sicherlich die Firma aus einer Liste wählen, oder über ein Suchformular heraussuchen.
Daraus kannst Du dann die ID der Firma in eine Variable überführen und ein Formular aufbauen in dem Du dann in einem Hidden-Feld diese ID als Value einfügst.
Dann kannst Du den Mitarbeiter mit der ID per Insert spreichern.

Konntest Du mir folgen?:-)

Wäre jetzt mal ein Schuß aus der Hüfte. Vielleicht hat ja jemand ne andere Idee?!
 
Hey,


mit Oracle geht das so:

INSERT INTO Mitarbeiter (FirmaID, Name)
SELECT FirmaID, 'Müller' FROM Firma WHERE Firmenname='XYZ' ;

Vielleicht das ja auch bei dir.
 
Kann denn deine DB sicher sein, dass es einen Firmennamen nur einmal gibt ?
Im Normalfall - wenn du kein unique o.ä. auf dem Namen hast, kann der Name ja mehrmals vorkommen - hieße, dein SELECT würde mehrere Datensätze zurückgeben können. Ich denke mal, das schmeckt der DB nicht...
 
Kann denn deine DB sicher sein, dass es einen Firmennamen nur einmal gibt ?

Genau das sehe ich auch so! Drum zunächst ein Suchformular, wo Du nach der Firma suchst. Aus der Ergebnisliste wählst Du die entsprechende Firma, der Du einen Mitarbeiter hinzufügen willst.
Anders kann es Probleme geben.
 
Also erstmal Danke für die Antworten.

Im Grunde habe ich genau die Antwort von Movera gesucht.

Das mit den Suchformularen vorher usw. ist mir klar d.h. in einem echten Programm hätte ich damit keine Probleme gehabt, allerdings hatte ich nicht erwähnt, dass ich den Befehl für ein Skript brauche, dass am Anfang die Datenbank mit Daten füllt. Außerdem ist der Firmenname UNIQUE.

Trotzdem Danke, vorallem an Movera

cu

Maxi
 
Original geschrieben von Gorcky
Kann denn deine DB sicher sein, dass es einen Firmennamen nur einmal gibt ?
Im Normalfall - wenn du kein unique o.ä. auf dem Namen hast, kann der Name ja mehrmals vorkommen - hieße, dein SELECT würde mehrere Datensätze zurückgeben können. Ich denke mal, das schmeckt der DB nicht...


Hi Gorcky,

du hast natürlich vollkommen recht. weil darkie_max den Firmennamen konstant angegeben hat bin ich davon ausgegangen, das er immer konstant bleibt. Falls nicht, läßt sich die select-klausel mit einem einfachen subselect erweitern und es geht dynamisch.
 
Zurück