Hallo Reto, Hallo Robert, Hallo Liste,

erstmal danke für eure Antworten, auch wenn sie noch nicht zu einer
funktionierenden Lösung geführt haben.

Robert schrieb:
> Vielleicht verstehe ich auch die Frage nicht so ganz. Aber Du hast
> ein Einfügekommando, dass nach dem Wert zu Ende ist. Willst Du
> das nächste Kommando gleich hinterherschieben, so musst Du
> mit ";" trennen. Das 2. Kommando ist eine ganz nurmale Abfrage,
> hat meines Erachtens mit dem ersten überhaupt nichts zu tun.

Um diese Unklarheiten zu beseitigen, werde ich die Aufgabe noch mal
ausführlich beschreiben:
Ich habe eine eine Tabelle mit Ausrüstungsgegenständen:

Items(*ItemID, Bezeichnung, ...)
1 Werkzeugkasten
2 Warndreieck
3 Klappleiter
4 Verkehrsleitkegel
....

In einer weiteren Tabelle sind Fahrzeugtypen gespeichert:

FzTyp(*FzTypID, Bezeichnung, ...)
1 Einsatzleitfahrzeug (Jeep)
2 Einsatzleitfahrzeug (Van)
3 Rüstwagen
...

Zwischen diesen beiden Tabellen gibt es ein n:m-Beziehung, die
ausdrückt welchen Lieferumfang der jeweilige Fahrzeugtyp enthält.
Diese Bezeihung ist durch eine weitere Tabelle realisiert:

FzLu(*FzTypID, *ItemID, Anzahl)
1 2 1
1 4 10
3 1 3
3 3 2
...

Bisher habe ich in der Datenbank also die erhältlichen Fahrzeugtypen
und ihren Lieferumfang gespeichert. Zum einen kann ich nun mehrere
Fahrzeuge desselben Typs kaufen, zum anderen kann ich die Ausstattung
dieser Fahrezuge nach dem Kauf verändern, deshalb gibt es die beiden
Tabellen
Fz(*FzID, FzTypID, ...)     in der die tatsächlich vorhandenen
Fahrzeuge gespeichert sind und
FzA(*FzID, *ItemID, Anzahl)  in der gespeichert wird welche Ausrüstung
auf welchem Fahrzeug ist (n:m Relation zwischen Fz und Items).

Was ich gerade um zu setzen versuche ist das "Kaufen eines neuen
Fahrzeugs". Dazu muss zuerst in Fz ein neuer Datensatz angelegt
werden, der auf den entsprechenden FzTyp verweißt. Das habe ich über
ein Makro erledigt. Danach muss für das neue Fahrzeug der Liederumfang
in die Ausstattungsliste übertragen werden, dazu wollte ich das SQL
Kommando wissen. Anders ausgedrück:
Ich suche ein SQL Kommando, dass mir in eine Tabelle (FzA) alle
Einträge einer anderen Tabelle (FzLu) kopiert, die eine bestimmte
Bedingung erfüllen (FzTypID = Fahrzeugtyp des neu gekauften
Fahrzeugs). Dabei werden auch der zweiten Tabelle aber nicht alle
Spalten benötigt (nur ItemID und Anzahl) und in die erste Spalte der
ersten Tabelle ist immer der gleiche Werte (FzID des neugekauften
Fahrzeugs) zu schreiben.

Nun zu euren Vorschlägen:
Reto schrieb:
> Ich glaube du hast die Spalte vergessen anzugeben. Zwar weiss die
> Datenbank nun dass du etwas in die Tabelle FzA schreiben willst, aber
> nicht in welche Spalte:
> INSERT INTO "FzA" (Spalte) VALUES (WERT)

Nach meinen Quellen ist die Angabe der Spalten, in die etwas
eingetragen werden soll optional. Werden die Spalten nicht angegeben,
müssen werte für jede vorhandene Spalte der Zieltabelle in der
richtigen Reihenfolge angegeben werden, was bei meinem Ansatz der Fall
war.

Reto machte noch folgenden Vorschlag:
> INSERT INTO "FzA" (Spalte1,ItemID,Anzahl) VALUES ('1',(SELECT "ItemID"
> FROM "FzLu" WHERE "FzTypID" = 10),(SELECT "Anzahl" FROM "FzLu"
> WHERE "FzTypID" = 10))

An diesem Vorschlag paßt mir nicht, dass für ItemID und Anzahl zwei
getrennte Abfragen gemacht werden, es ist aber wichtig, das ItemID und
Anzahl aus dem selben Datensatz der abgefragten Tabelle stammen.
Bringt diese Abfrage den Fehler "Single Value expected".

Rober schlug vor:
> INSERT INTO "AFz" (FzID) VALUES ('1');
> SELECT "FzLu"."ItemID" "FzLu"."Anzahl"
> FROM "FzLu" WHERE "FzLu"."FzTypID" = 10

Hierbei handelt es sich doch um nacheinander abgearbeitete
Anweisungen, oder. Das Ergebnis von Select soll aber geinsertet werde,
wie oben beschrieben.

Ich habe inzwischen die Vermutung, dass ich das Problem eleganter mit
Union oder Join lösen kann. Die Einleitung des entsprechenden Kapitels
in meinen SQL-Buch klingt vielversprechend.

Gruß Lars

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Antwort per Email an