Problem mit UPDATE und WHERE Kondition

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

ISoPaB
Beiträge: 2
Registriert: Sa, 27.07.2019 11:31

Problem mit UPDATE und WHERE Kondition

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: 738
Registriert: Do, 05.03.2015 10:42

Re: Problem mit UPDATE und WHERE Kondition

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.6, LO 6.3.0 (x64)

RobertG
*******
Beiträge: 1787
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Problem mit UPDATE und WHERE Kondition

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

Re: Problem mit UPDATE und WHERE Kondition

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: 1787
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Problem mit UPDATE und WHERE Kondition

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

Antworten