Update eines Feldes aus einer anderen Tabelle

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21321
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 229 Mal
Danksagung erhalten: 74 Mal

Update eines Feldes aus einer anderen Tabelle

Beitrag von Manfred »

Tach,
ich habe mal wieder einen Knoten im Hirn. Ich habe eine Tabelle Personal und eine Tabelle Verträge. Nun möchte ich einmalig die Personaltabelle updaten und dort ein Datum eintragen. Dieses Datum soll aus der Vertragstabelle kommen, die mehrere EInträge haben kann je Personalsatz. Es soll immer das höchste DAtum genommen werden aus der Vertragstabelle und in die Personaltabelle übertragen werden, aber nur wenn das Datum in der Personaltabelle kleiner als das Datum aus der Vertragstabelle ist.
Ich habe etliches versucht, komme aber irgendwie nicht ans Ziel.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9481
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 112 Mal
Danksagung erhalten: 380 Mal
Kontaktdaten:

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Tom »

Weiter versuchen! Tschaka! 8)
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21321
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 229 Mal
Danksagung erhalten: 74 Mal

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Manfred »

Hi Tom,
hast Du irgendwann einen Clown gefrühstückt, der Dir absolut nicht bekommen ist?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9481
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 112 Mal
Danksagung erhalten: 380 Mal
Kontaktdaten:

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Tom »

Huhu, Manfred.

Wenn man den Clown ordentlich zubereitet, ist er nicht nur ein gutes Frühstück, sondern man kann auch das Mittagessen auslassen.

Spaß beiseite. Ich bin SQL-Rookie, aber auf Deine Fragestellung hätte ich vermutlich auch dann keine hilfreiche Antwort, wenn ich SQL-Pro wäre. Dafür ist das noch deutlich zu abstrakt.
Herzlich,
Tom
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2165
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 31 Mal
Danksagung erhalten: 80 Mal

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Werner_Bayern »

Abstrakt: max(vertrag.datum) as maxdatum where personal.datum > maxdatum ist dein Select im updatebefehl ... where vertrag.personalid = personal.personalid
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 889
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 42 Mal
Danksagung erhalten: 206 Mal
Kontaktdaten:

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Marcus Herz »

Für ADS i etwa so

Code: Alles auswählen

update personal  set vertragsdatum = vertrag.d
left join (select personalnr, max(vertragdatum) as d from vertrag group by 1) vertrag on vertrag.personalnr = personal.persoanlnr
where vertragsdatum < vertrag.d
 
Gibt es keinen Vetrag zu einer Person, dann ist vertrag.d NULL folglich auch die WHERE Bedingung false.
Musst halt noch die Feldnamen anpassen
Gruß Marcus

Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21321
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 229 Mal
Danksagung erhalten: 74 Mal

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Manfred »

das müßte doch jetzt das äquivalent zu Deinem sein Marcus

Code: Alles auswählen

update fahrer set austritt = vertrag.d
left join (select idfahrer, max(gueltigbis) as d from arbeitsverhaeltnisse2fahrer group by 1) vertrag on vertrag.idfahrer = fahrer.id
where austritt < vertrag.d
klappt nicht
poQuery: Error 7200: AQE Error: State = 42000; NativeError = 2117; [SAP][Advantage SQL Engine]Unexpected token: left -- Expecting semicolon. -- Location of error in the SQL statement is: 40 (line: 2 column: 1)
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 889
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 42 Mal
Danksagung erhalten: 206 Mal
Kontaktdaten:

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Marcus Herz »

Sorry

Code: Alles auswählen

update fahrer set austritt = vertrag.d
from fahrer
left join (select idfahrer, max(gueltigbis) as d from arbeitsverhaeltnisse2fahrer group by 1) vertrag on vertrag.idfahrer = fahrer.id
where austritt < vertrag.d
Gruß Marcus

Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21321
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 229 Mal
Danksagung erhalten: 74 Mal

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Manfred »

jetzt steht ich komplett daneben. Bist Du Dir sicher? Jetzt werden 0 Sätze upgedatet.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21321
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 229 Mal
Danksagung erhalten: 74 Mal

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Manfred »

aber wenn ich mir das jetzt mal so anschaue, wenn ich die WHERE Klausel weg lasse, dann sieht es eigentlich so aus, wie ich es haben möchte. Kommt sicherlich von max() und group by.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 677
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 4 Mal
Danksagung erhalten: 109 Mal
Kontaktdaten:

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von nightcrawler »

Hallo Manfred,
stell doch ein Minimalbeispiel rein, welches die Tabellen erzeugt und ein paar Testdatensätze einfügt. Dann zeige, was als Resultat rauskommen soll.
Damit kann man es evtl rekonstruieren, alles andere ist blind geraten.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21321
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 229 Mal
Danksagung erhalten: 74 Mal

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Manfred »

Hi Joachim,
es sieht doch im Moment gut aus. Ich habe Where weggelassen und das Update lief.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 889
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 42 Mal
Danksagung erhalten: 206 Mal
Kontaktdaten:

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Marcus Herz »

evtl. war in der Fahrer.austritt NULL
Gruß Marcus

Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21321
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 229 Mal
Danksagung erhalten: 74 Mal

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Manfred »

hm,
da müßte '0000-00-00' drin gewesen sein, das hatte ich eingetragen um zu testen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 889
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 42 Mal
Danksagung erhalten: 206 Mal
Kontaktdaten:

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Marcus Herz »

Ein DATE Feld mit dem Datum ???
Ist das auch gespeichert worden?
Ein leeres/ungültiges Datum ist immer NULL
Gruß Marcus

Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 889
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 42 Mal
Danksagung erhalten: 206 Mal
Kontaktdaten:

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Marcus Herz »

Code: Alles auswählen

update fahrer set austritt = vertrag.d
from fahrer
left join (select idfahrer, max(gueltigbis) as d from arbeitsverhaeltnisse2fahrer group by 1) vertrag on vertrag.idfahrer = fahrer.id
where coalesce(austritt, curdate() - 3650)  < vertrag.d
Gruß Marcus

Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21321
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 229 Mal
Danksagung erhalten: 74 Mal

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Manfred »

ich habe das gewählt, weil '' ja nicht klappt. Was hätte ich stattdessen nehmen müssen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 889
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 42 Mal
Danksagung erhalten: 206 Mal
Kontaktdaten:

Re: Update eines Feldes aus einer anderen Tabelle

Beitrag von Marcus Herz »

Andere Schreibweise, in Bedingung mit "IS NULL"

Code: Alles auswählen

update fahrer set austritt = vertrag.d
from fahrer
left join (select idfahrer, max(gueltigbis) as d from arbeitsverhaeltnisse2fahrer group by 1) vertrag on vertrag.idfahrer = fahrer.id
where iif( austritt IS NULL, true,  austritt  < vertrag.d)
Gruß Marcus

Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
Antworten