Seite 1 von 1
Problem mit UPDATE und WHERE Kondition
Verfasst: Sa, 27.07.2019 11:39
von ISoPaB
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
Re: Problem mit UPDATE und WHERE Kondition
Verfasst: Sa, 27.07.2019 13:53
von nikki
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")
Re: Problem mit UPDATE und WHERE Kondition
Verfasst: Sa, 27.07.2019 21:48
von RobertG
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
Re: Problem mit UPDATE und WHERE Kondition
Verfasst: Mo, 29.07.2019 16:19
von ISoPaB
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.
Re: Problem mit UPDATE und WHERE Kondition
Verfasst: Mo, 29.07.2019 16:32
von RobertG
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