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
Gelöst: Insert mit Select und Value (oder zweiter Abfrage)
Moderator: Moderatoren
Gelöst: Insert mit Select und Value (oder zweiter Abfrage)
Zuletzt geändert von MEcki am Fr, 18.09.2009 10:02, insgesamt 1-mal geändert.
Re: Insert mit Select und Value (oder zweiter Abfrage)
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
Re: Insert mit Select und Value (oder zweiter Abfrage)
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
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
Re: Insert mit Select und Value (oder zweiter Abfrage)
Hallo MEcki,
probier einmal:
Gruß Barlee
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
Re: Insert mit Select und Value (oder zweiter Abfrage)
Hallo Barlee,
besten Dank, das war's!
Mit
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
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
Danke für die schnelle Hilfe