Datenbanklösungen mit AOO/LO
Moderator: Moderatoren
-
ISoPaB
- Beiträge: 2
- Registriert: Sa, 27.07.2019 11:31
Beitrag
von ISoPaB » Sa, 27.07.2019 11:39
Hallo Forum,
leider kann Base (6.0.7.3) 0 Zeilen aktualisieren, wenn ich folgende SQL-Anweisung direkt ausführe:
Code: Alles auswählen
UPDATE "Mitglied"
SET "Dat" = '2019-06-30'
WHERE "ID_Mitglied" = (SELECT "ID" FROM "Tabelle" WHERE "Mitglied"."ID_Mitglied" = "Tabelle"."ID")
Zum Kontext: Die Tabelle "Mitglied" enthält Mitgliedsinformationen, "Dat" ist ein Datumsfeld der Mitgliedertabelle. Tabelle wiederum enthält 1 Feld "ID", in dem ausgewählte IDs der Tabelle "Mitglieder" enthalten sind. Das Datumsfeld "Dat" in der Mitgliedertabelle soll für die Einträge aus "Tabelle" mit '2019-06-30' gefüllt werden. Aber leider 0 rows updated.
Was mache ich falsch?
Danke, Pascal
-
nikki
- ******
- Beiträge: 776
- Registriert: Do, 05.03.2015 10:42
Beitrag
von nikki » Sa, 27.07.2019 13:53
Hallo Pascal,
probiere es mal wie folgt:
Code: Alles auswählen
UPDATE "Mitglied"
SET "Dat" = '2019-06-30'
WHERE "ID_Mitglied" IN (SELECT "ID" FROM "Tabelle" WHERE "Mitglied"."ID_Mitglied" = "Tabelle"."ID")
Gruß
---------------------------------------------------------
Win.10 Prof. 64-bit, AOO 4.1.7, LO 6.3.4 (x64)
-
RobertG
- *******
- Beiträge: 1799
- Registriert: Fr, 13.04.2012 19:28
-
Kontaktdaten:
Beitrag
von RobertG » Sa, 27.07.2019 21:48
Hallo *,
Code: Alles auswählen
UPDATE "Mitglied" AS "a"
SET "a"."Dat" = '2019-06-30'
WHERE "a"."ID_Mitglied" = (SELECT "ID" FROM "Tabelle" WHERE "a"."ID_Mitglied" = "ID")
Das muss mit einer korrelierenden Unterabfrage laufen. Nur dann weiß die in Klammern stehende Abfrage, was in der äußeren Bedingung als Wert für "ID-Mitglied steht. Nur wenn beides gleich ist ergibt die Unterabfrage einen Wert und das Datum wird gesetzt. Ansonsten weiß die Unterabfrage von der Tabelle "Mitglied" überhaupt nichts.
Einfacher ist natürlich
Code: Alles auswählen
UPDATE "Mitglied"
SET "Dat" = '2019-06-30'
WHERE "ID_Mitglied" IN (SELECT "ID" FROM "Tabelle")
Die Unterabfrage enthält keine Verbindung zur Hauptabfrage. Deswegen hat da auch die äußere Tabelle nichts zu suchen.
Gruß
Robert
-
ISoPaB
- Beiträge: 2
- Registriert: Sa, 27.07.2019 11:31
Beitrag
von ISoPaB » Mo, 29.07.2019 16:19
Hallo und vielen Dank für eure Antworten.
Leider hat
RobertG hat geschrieben: ↑Sa, 27.07.2019 21:48
Code: Alles auswählen
UPDATE "Mitglied" AS "a"
SET "a"."Dat" = '2019-06-30'
WHERE "a"."ID_Mitglied" = (SELECT "ID" FROM "Tabelle" WHERE "a"."ID_Mitglied" = "ID")
nicht funktioniert, es wurden noch immer 0 Zeilen aktualisiert.
Die zweite Methode ging dagegen super.
RobertG hat geschrieben: ↑Sa, 27.07.2019 21:48
Code: Alles auswählen
UPDATE "Mitglied"
SET "Dat" = '2019-06-30'
WHERE "ID_Mitglied" IN (SELECT "ID" FROM "Tabelle")
Danke nochmal, Pascal
p.s.: Ich finde keine Option, den Beitrag als "gelöst" zu markieren.
-
RobertG
- *******
- Beiträge: 1799
- Registriert: Fr, 13.04.2012 19:28
-
Kontaktdaten:
Beitrag
von RobertG » Mo, 29.07.2019 16:32
Hallo Pascal,
den Beitrag kannst Du als "gelöst" markieren, indem Du die Überschrift Deines Ursprungsbeitrages entsprechend änderst (z.B. [gelöst] hinzufügst.
Dass das Update mit der korrelierenden Unterabfrage nicht funktioniert liegt daran, dass die Unterabfrage auch leer sein kann - und dann ist der Code fehlerhaft:
"a"."ID_Mitglied" = NULL
ist nicht korrekt. NULL wird nur zusammen mit IS oder IS NOT gebraucht, nicht mit dem Gleichheitszeichen.
Gruß
Robert