Hallo Stephan,
Stephan03 hat geschrieben:Code: Alles auswählen
UPDATE "Daten"
SET "Daten"."GEBOREN" = "gebdat"."gebdat"
1. Ein UPDATE bezieht sich immer auf eine bestimmte Tabelle; deren Namen wird deshalb nicht bei der Spalte angegeben. (Es könnte sein, dass es akzeptiert wird; es ist aber zumindest unüblich.)
Stephan03 hat geschrieben:Code: Alles auswählen
WHERE ("Daten"."NAME" = "gebdat"."name" AND "Daten"."VORNAME" = "gebdat"."vorname")
2. SQL arbeitet
mengenorientert. Die WHERE-Bedingung bestimmt deshalb die Menge aller Datensätze, für die eine bestimmte Änderung (durch SET festgelegt) vorgenommen werden soll. Es bedeutet
nicht, dass für jeden Datensatz dieser Menge eine einzelne bestimmte Änderung vorzunehmen ist.
3. Du suchst dagegen für alle Datensätze (also kein WHERE nötig) das Geburtsdatum (also einen bestimmten Wert), das für einen einzelnen Datensatz gültig ist. Das wird durch eine Unterabfrage erreicht, also etwa so:
Code: Alles auswählen
UPDATE "Daten"
SET "GEBOREN" = (
SELECT MAX("gebdat") FROM "gebdat"
WHERE "Daten"."NAME" = "gebdat"."name" AND "Daten"."VORNAME" = "gebdat"."vorname"
)
Das MAX habe ich eingefügt, damit immer genau ein Wert zur Verfügung gestellt wird.
Anmerkungen:
1. Wie du siehst, solltest du zwischen den Namen von Tabellen und Spalten (und Datenbanken) immer unterscheiden. Gleiche Namen führen zumindest zu Verwirrungen.
2. Ich hoffe doch, dass die Tabellen mit ID als Primärschlüssel arbeiten, was du hier nur der Übersicht halber verschweigst. Andernfalls gibt es über kurz oder lang Probleme.
3. Mehr Informationen findest du in der
Einführung in SQL.
Gruß Jürgen
PS. Zum wiederholten Mal ist Robert zwei Minuten schneller als ich, und er hat im Wesentlichen die gleichen Gesichtspunkte gebracht. Ich speichere meinen Beitrag trotzdem: doppelte Erklärungen mit unterschiedlichen Formulierungen können hilfreich sein.