SQL, Wie verbinde ich eine Aktualisierungsabfrage mit einer Bedingung?
Ich möchte, dass die Kosten nur bei einer bestimmten Reitart um 30% erhöht werden. Den Code ohne die Bedingung habe ich so gemacht:
UPDATE Pferd SET Pferd.Kosten = Pferd.Kosten1.3
Kann mir jemand helfen wie ich diese Bedingung als Code schreibe?
Vielen Dank!
3 Antworten
Meinst du sowas
UPDATE Pferd
SET Pferd.Kosten = Pferd.Kosten1.3
INNER JOIN Reitart
ON Reiter.ReitartNr = Reitart.ReitartNR
WHERE Reitart.Reitart = 'welche Art';
Fehlt da nicht noch ein Multiplikationszeichen?
Kannst du die Tabellen Mal in SQLfiddle hauen und die Link teilen, am Handy ist das zu aufwendig
Mir ist Grade was andere aufgefallen.
Du willst die Kosten für eine reitart erhöhen.
Aber Reiter und pferd ist eine 1:n Beziehung.
Die Art ist Aber eine n:1 Beziehung zwischen Reiter und Reit Art.
Wen du die Kosten bei pferd erhöhst dann für alle reiter die ein pferd haben das auf reitart x laufen, unabhängig davon was sie tatsächlich haben.
Oder ist das so gewollt?
Wenn du tatsächlich nur die Kosten für reitart x aber nicht für y erhöhen willst brauchst du einen anderen Ansatz das zu lösen
Wenn ich mir jetzt kein totales Ei gebraten habe dann so:
http://www.sqlfiddle.com/#!9/7f25db/3
Habe es in MySQL formuliert und als SELECT musst es dann anpassen
Wenn du willst helfe ich dir heute abend noch mal in Ruhe über Teamspeak oder was auch immer
Dass Updates Statement muss man umformulieren das kann ich aber am Handy nicht testen
wie kriegst du so die Verbindung zwischen ReiterNr und Reiter hin? kicher
so ungefähr: https://stackoverflow.com/questions/2334712/how-do-i-update-from-a-select-in-sql-server
sieht wild aus... mit ner temporären Tabelle, die diese ganzen Referenzen auflöst...
oder mit embeddedSQL und C... das erscheint einfacher... kann aber eigentlich noch wilder sein...
oder man nimmt was ganz anderes an Stelle von SQL: Datalog z. B....
Embedded SQL ist auch kein anderes SQL, wird nur vom Programm aus aufgerufen und das Ergebnis ans Programm zurückgeschickt.
update Pfrerd set Kosten = neue Kosten where ReiterNr in
(select ReiterNr from Reiter where ReitartNr in
(select ReitartNr from Reitart where Reitart = bestimmte Reitart))
Ergänzend dazu: Für neue Kosten habe ich hier aus Versehen eine Konstante vorgesehen. Bei einer variablen Erhöhung kann man natürlich auch eine Formel einsetzen:
set Kosten = Kosten * 1,30
Fehlt da nicht Reiter.ReiterNr = Pferd.ReiterNr? Es wird Syntaxfehler(fehlender Operator) angezeigt