SQL update mit Where Klausel aus 2 Tabellen?

Sapperlot

Mitglied
Hallo,
Situation: Datenbank mit mehreren Tabellen:
update Statement soll ausgeführt werden.

Problem:
Tabelle2 habe das boolean Attribut T2_RightOrWrong
Tabelle3 habe mehrere andere Attribute und soll updated werden

Was möchte ich erreichen?
In Tabelle3 Daten updaten, mit einer where Klausel aus T02_RightORWrong

also ähnlich der Syntax
update Tabelle3 set Feld T3_Gehalt = 1000 where T3_Name = 'Fritz' AND T3_Alter = 33 AND T02_RightOrWrong = true;

Wie funktioniert's die Daten aus anderen Tabellen mit reinzunehmen? Hat das was mit Joins zu tun?
Kann man die Attribute über Tabelle2.RightOrWong ansprechen, oder wie geht's ?

Gruß, Basti
 
Hallo Basti,

es hat was mit joins zu tun. Beide Tabellen müssen über eine Spalte miteinander verknüpft werden.
Wenn du jetzt eine konkrete Syntax haben möchtest, dann poste bitte den Namen deines DBMS und die Struktur der beiden Tabellen.
 
DBMS:
Es ist Access. Ich greife aber über Borland C++ builder darauf zu, über odbc eben. Sprich SQL Syntax.

Obiges Beispiel mit den Tabellen war nur abstrakt. Hier jetzt das konkrete Beispiel.


Was soll erreicht werden?
Also. In der T03 Tabelle befinden sich Baugruppen. Diese werden geprüft. Das Testergebnis wird dann in T02 abgelegt.
Daher sind T02 und T03 miteinander verknüpft.
Da eine baugruppe mehrmals geprüft werden kann gilt folgende Relation:
T02_BAUGRUPPE_FK <n>---<1> T03_KUNDE_FK

T02_PRUEFUNG hat den bool T02_PRUEFUNG_ERFOLGREICH. Hier wird gespeichert, ob die Prüfung der Baugruppe ok war, oder nicht.

DAS UPDATE STATEMENT.
Das Update Statement soll nun T03_KUNDENAUFTRAGSNUMMER updaten und zwar für alle Baugruppen die eine bestimmte T03_BEZEICHNUNG haben!
Das habe ich so weit realisiert.

Aber nun kommt der verzwickte Part.
T03_KUNDENAUFTRAGSNUMMER darf nur zugewiesen werden, wenn in der Tabelle T02_PRUEFUNG das Attribut T02_PRUEFUNG_ERFOLGREICH true ist. Und zwar nicht irgendwann, sondern zur aktuellsten Version.
Wie gesagt können zu einer Baugruppe mehrere Prüfungen durchgeführt werden.
So kann bei Prüfung 1, 2 und 3 der Wert falsch sein.
Bei Prüfung 4 kann dann der Wert dann true sein, für die Baugruppe. Und erst dann soll eben die Baugruppe ihre Kundenauftragsnummer zugewiesen bekommen.

Hintergrund:
Einer Baugruppe die die Prüfuing nicht bestanden hat, soll mit diesem Update keine Kundenauftragsnummer zugewiesen werden.

Falls es nicht durch Abfragen lösbar sein sollte, dann ziehe ich in Erwäögung, dass halt noch in der Baugruppentabelle gespeichert wird, ob der Test erfolgreich war, doer nicht.
Aber elegant wäre dieser Ansatz sicher nciht.


//EDIT
Und noch was.
Falls das zu kompliziert ist habe ich noch eine zweite Alternative.
Es gibt auch noch eine T05_KUNDE mit dem Attribut T05_KUNDENNUMMER
Jede Baugruppe hat eine Kundennummer.
D.h. T03_BAUGRUPPE <n>----<1> T05_KUNDE, weil ein Kunde ja mehrer Baugruppen beziehen kann, aber eine Baugruppe nur an einen Kunden geschickt wird.
Wenn eine Prüfung nciht erfolgreich geprüft wird, dann wird die Kundennummer auf 0, doer -1 gesetzt. Somit ist sie keinenm Kunden zugewiesen.
Das heisst dann beogen auf obiges Problem: Wenn ich überprüfen könne, ob die Auftragsnummer der Baugruppe stimmt UND die Baugruppe eine Kundennummer besitzt, wäre das schon meine Lösung...
// End EDIT


Gruß, Basti...
Anbei dann noch die Struktur der Tabellen, Vielen Dank


T02_PRUEFUNG
LONGINT T02_AUTO_ID
DATE/TIME T02_PRUEFDATUM
DATE/TIME T02_PRUEFZEIT
JA / NEIN T02_PRUEFUNG_ERFOLGREICH
MEMO T02_PRUEFERGEBNIS
TEXT T02_PRUEFPLATZ
TEXT T02_PRUEFPROG_VERSION
LONGINT T02_PERONAL_NR_FK
LONGINT T02_BAUGRUPPE_FK

T03_BAUGRUPPE
LONGINT T03_PK
TEXT T03_SERIENNUMMER
TEXT T03_BEZEICHNUNG
TEXT T03_KUNDENAUFTRAGSNUMMER
LONGINT T03_AUFTRAGSNUMMER_FK
LONGINT T03_KUNDE_FK
 
Zuletzt bearbeitet:
Zurück