Gelöst: Insert mit Select und Value (oder zweiter Abfrage)

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

MEcki
**
Beiträge: 25
Registriert: Do, 17.09.2009 10:31

Gelöst: Insert mit Select und Value (oder zweiter Abfrage)

Beitrag von MEcki »

Hallo,

ich versuche mich gerade an einer Vereinsverwaltung (Förderverein einer Schule). Für die Betreuungsbeiträge habe ich über eine m:n Beziehung geregelt, welches KIND in welchem MONAT welchen Betrag (der ist jeweils gleich) zu zahlen hat.
Die verknüpfende Tabelle ("KinderMonateÜMI") enthält die Felder id_Kinder (Integer), id_Monat (integer), Betrag (Dezimal), bezahlt (Boolean).
id_Kinder kommt aus der Tabelle der Kinder, id_Monat aus der Monatstabelle. Automatischer Eintrag funktioniert je Kind über ein Formular, ist bei 60 Kindern je Monat aber etwas sehr müßig.

Wie müsste ein INSERT INTO aussehen, damit die verknüpfende Tabelle jeden Monat (automatisch) mit den aktuell zahlungspflichtigen Kindern UND der entsprechenden id für den Monat gefüllt wird.

insert into "KinderMonateÜMI" ("id_Kinder", "id_Monat") Values (1,3) funktioniert bei Extras > SQL... Statement ausführen

die 1 (id_Kinder) würde ich gerne über eine Abfrage füllen wie:
SELECT "ID_Kinder" FROM "Kinder" AS "Kinder" WHERE "Kündigung ÜMI zum:" IS NULL

die 3 (id_Monat) wäre mir eigentliche egal.

das Feld Betrag (also: insert into "KinderMonateÜMI" ("id_Kinder", "id_Monat" "Betrag") Values ....
hab ich erst mal aussen vor gelassen, das lässt sich anscheinend dadurch befüllen, dass ich in der Tabelle einen entsprechenden Default eingebe.

eine Kombination wie
insert into "KinderMonateÜMI" ("id_Kinder", "id_Monat") Values (SELECT "ID_Kinder" FROM "Kinder" AS "Kinder" WHERE "Kündigung ÜMI zum:" IS NULL,3)

bringt den Fehler "Single value expected"

ist hier ein Klammer falsch, geht das gar nicht oder was mache ich da sonst falsch? Hab schon div. andere Kombinationen (auch ohne Values e. versucht, aber nur Fehler.)

Eine Umgehungslösung wäre bisher nur, die id_Kinder nach Calc zu exportieren, die anderen Tabellen anzufügen und entsprechend mit den aktuellen werten zu befüllen (sind ja für alle Kinder gleich), und anschließend an "KinderMonateÜMI" anzufügen.
Erscheint mir aber dauerhaft nicht als besonders elegante Lösung.
Besten Dank für Eure Rückmeldungen schon mal!
MEcki
Zuletzt geändert von MEcki am Fr, 18.09.2009 10:02, insgesamt 1-mal geändert.
vfl
Beiträge: 3
Registriert: Di, 15.09.2009 10:29

Re: Insert mit Select und Value (oder zweiter Abfrage)

Beitrag von vfl »

Hallo, es sieht so aus, als gibt die Abfrage mehr als ein Ergebnis zurück. Das darf in dem Insert nicht sein. Was zeigt das select? Im Oracle müßte die komplette select-Anweisung auch in Klammern stehen, da hättest Du richtig gelegen. Besten Gruß - vfl
MEcki
**
Beiträge: 25
Registriert: Do, 17.09.2009 10:31

Re: Insert mit Select und Value (oder zweiter Abfrage)

Beitrag von MEcki »

Die Abfrage bringt eine Liste aller ID's der Kinder als Ergebnis. Hatte gedacht, das würde gehen bzw. im INSERT nichts gesehen (und natürlich auch nicht gesucht), dass mehrere Werte nicht gehen. Das erklärt zumindest die Fehlermeldung, die ich auf irgend etwas anderes bezogen hatte.

Gibt es denn irgend eine andere Möglichkeit über SQL mehrere Werte einzufügen? Schleife oder so? So gut kenne ich mich da noch nicht aus.
Oder ist der Weg eine Schleife in OOO Basic (wo ich mich auch noch nicht wirklich auskenne). Hab bisher nur (wenig) in VB gebastelt.

Danke für die Antwort

MEcki
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Insert mit Select und Value (oder zweiter Abfrage)

Beitrag von Barlee »

Hallo MEcki,

probier einmal:

Code: Alles auswählen

INSERT INTO "KinderMonateÜMI" ("id_Kinder", "id_Monat") SELECT "ID_Kinder", '3' AS "id_Monat" FROM "Kinder"
WHERE "Kündigung ÜMI zum:" IS NULL
Gruß Barlee
MEcki
**
Beiträge: 25
Registriert: Do, 17.09.2009 10:31

Re: Insert mit Select und Value (oder zweiter Abfrage)

Beitrag von MEcki »

Hallo Barlee,

besten Dank, das war's!

Mit

Code: Alles auswählen

INSERT INTO "KinderMonateÜMI" ("id_Kinder", "id_Monat", "Betrag") SELECT "ID_Kinder", '3' AS "id_Monat",'45' AS "Betrag" FROM "Kinder"
WHERE "Kündigung ÜMI zum:" IS NULL
wird dann auch noch der Betrag korrekt eingetragen. Über einen Defaultwert, wie ich vermutet hatte, funktioniert es doch nicht.

Danke für die schnelle Hilfe
Antworten