SQL-Statement Update mit innerjoin

OnDemand

Top Contributor
Guten Morgen zusammen,
ich möchte meine Updates beschleunigen. Ist es möglich ein Innerjoin in einem Update stmt. Zu packen? Kann mir da jemand helfen, bin mit SQL nicht so bewandert was außerhalb der Standard CRUD liegt. Tabellen sind zb.

Auto
autoID
autoName

Autoreise
autoID
autoPreis

Update autopreise set autopreis=100.00 where autoID=123

Aber sie AutoId muss ich vorher erst aus der DB lesen, was die Sache etwas verlangsamt. Daher mein Gedanke während des Updates gleich die ID zu holen und dadurch etwas zeit zu sparen.

Habt ihr eine Idee? Freue mich auf Hilfe!
 
K

kneitzel

Gast
Ich verstehe das Problem im Augenblick nicht. Du willst nur den Preis ändern und hast nur den Namen? Dann kannst Du die Id per Select holen Update .... Where autoID = (select autoID from ......)
 

Thallius

Top Contributor
UPDATE Autopreise
JOIN Auto ON (Auto.autoID = Autopreise.autoID)
SET Autopreise.autopreis=100.00
WHERE Auto.autoName=123

Gruß

Claus
 

OnDemand

Top Contributor
Thallius, danke!!!!!!!!!! Teste ich sofort wenn ich zu hause bin. Beschleunigt das die Updates im Gegensatz zu einem extra stmt um die Id zu holen?
 

OnDemand

Top Contributor
Geht das auch mit INSERT? Hab getestet aber falsche syntax :'(

zb

stmt.executeUpdate("INSERT INTO auto(autoId, name) VALUES(1,'Mercedes')");
stmt.executeUpdate("INSERT INTO autoBeschreibung(autoId, beschreibung) VALUES(hierDieIDAusAuto,'schönes Auto')");

Bisher sende ich sein seperaten SELECT vorab und speicher den wert in einer Variable. Aber das geht garantiert auch zeitschonender in einem Query oder?
 

Joose

Top Contributor
Die entsprechende Dokumentation der DB zeigt meistens auch genau welche Syntax erlaubt, also einfach mal die Dokumentation lesen ;)
Hier ein Beispiel für MySQL http://stackoverflow.com/questions/5391344/insert-with-select , kann man auf dein Anwendungsfall umlegen

Ansonsten kommt mir dein Datenbankschema sehr eigenartig vor. Du hast nur für die Beschreibung und den Preis jeweils eine eigene Tabelle erstellt?
Welchen Sinn soll das haben außer dir das Programmieren zu erschweren weil du 3 Statements statt nur einen absetzen musst?
 

Joose

Top Contributor
Aber vielleicht solltest du dir auch überlegen ob du nicht einen kleinen Designfehler in deinem Programm hast.

(Bezogen auf deine Beispiele) Wenn ich für ein Auto eine Beschreibung hinzufügen will oder eine neuen Preis setzen will, dann habe ich schon ein Auto Objekt im Speicher und nicht nur den Namen oder die ID des Auto.
Sprich ich habe alle notwendigen Daten im Speicher und muss davor nicht immer eine SELECT absetzen.

Und wenn du wirklich nur anhand von einem String für das passende Auto neue Daten eintragen willst, würde ich es bei 2 verschiedenen SQL Statements belassen (einer um das Auto Objekt zu laden, einer um die neuen Daten einzutragen).
 
Zuletzt bearbeitet:

OnDemand

Top Contributor
Die DB ist vorgegeben, da kann ich nichts daran ändern. Warum sollte man keine Subselects machen? Wie könnte man einen INSERT in eine andere Tabelle beschleunigen, wenn ich als Wert die ID aus einer anderen Tabelle brauche
 

Joose

Top Contributor
Die DB ist vorgegeben, da kann ich nichts daran ändern.
Muss man ja auch nicht (unbedingt).

Warum sollte man keine Subselects machen?
Ganz ohne auskommen muss man nicht, man sollte eben nur gut darauf achten wie man sie einsetzt.
Je nachdem wo ich sie verwende kann es auch schlechter werden mit der Performance
Siehe: https://en.wikipedia.org/wiki/Correlated_subquery

Wie könnte man einen INSERT in eine andere Tabelle beschleunigen, wenn ich als Wert die ID aus einer anderen Tabelle brauche

Wo genau liegt dein Problem: Findest du einfach die DB ist zu langsam? Willst du die DB Zugriffe minimieren? Oder soll die Applikation einfach nur schneller sein?
Je nach Datenbank gibt es mehrere Möglichkeiten sie zu beschleunigen: Indexes sollten überall funktionieren, bei Oracle, IBM und MSSQL kann man noch viele Einstellungen am DB Server anpassen je nachdem kann sich das positiv/negativ auswirken.

Wie oben schon geschrieben vielleicht wäre auch ein anderer Ansatz zielführend: Das entsprechende Auto Objekt bzw. die IDs schon früher in den Speicher zu laden. (vor allem wenn du öfters zum gleichen Auto unterschiedliche UPDATES durchführst)[/QUOTE]
 
K

kneitzel

Gast
Was spricht hier gegen die Unterabfrage? Das ist eine gültige SQL Abfrage und vernünftige Datenbanken sollten da keinerlei Unterschied machen was die Geschwindigkeit angeht. Es gibt nur ganz wenige Konstellationen, bei denen es einen Unterschied macht, wenn halt die innere Abfrage wiederholt aufgerufen werden müsste. Das sind aber wieder ganz spezielle Fälle so dass hier schlicht kein Unterschied zu erwarten ist.

Ich würde mich jetzt sogar nicht wundern, wenn der Execution Plan beim MS SQL Server bei beiden Abfragen gleich wäre, aber das werde ich jetzt nicht noch extra überprüfen.

Konrad
 

OnDemand

Top Contributor
Möchte das beschleunigen und die Updates reduzieren.
Derzeit mache ich es so, ich habe eine List mit allen Auto-Objekten (10.000+) aus einer Datei gelesen.
Diese gehe ich in einer for Schleife durch und rufe dann eine methode auf "insert" in dieser Methode muss ich 5 Tabellen mit den Daten aus Autoobjekt füllen, also habe ich 5 Statements (Preperaed STMT verboten, warum ist nicht wichtitg) for dem INSERT seicher in einer Variable die autiID damit ich da schon mal nicht jedes mal abfragen muss
 

Dukel

Top Contributor
Machst du das jedes mal oder ist das eine einmalige (Datenimport) Aktion?
Evtl. kann man die Daten in eine Temporäre Tabelle laden (ohne Indexe) und dann davon in die richtigen Tabellen kopieren / verschieben.
Wie lange dauert diese Aktion bisher? Sekunden? Minuten? Stunden?

EDIT: Ach ja. Hast du Möglichkeiten die Peformance auf SQL Ebene zu debuggen? Kannst du z.B. die Ausführungspläne ausgeben?
 

OnDemand

Top Contributor
Hi, öhm Ausführungspläne, sorry noch nie gehört? Zugriff hab ich volle Rechte.

Diese Daten werden stündlich aktualisiert, leider braucht das Update knapp über 1h ca. Ich muss es schneller erledigen könnnen. Problem ist, dass es über eine externe DB geht, diese hat keine externen Zugriffe erlaubt daher muss ich dort mit einem PHP Script arbeiten. Am PHPScript liegt es aber nicht.
 

Joose

Top Contributor
Derzeit mache ich es so, ich habe eine List mit allen Auto-Objekten (10.000+) aus einer Datei gelesen.

Sprich du hast die Autos und deren IDs zur Verfügung. Sprich du brauchst doch keine extra SELECTs ausführen bzw. SELECT im UPDATE einbauen.
Damit würdest du unnötigerweise etwas verkomplizieren.

...... in dieser Methode muss ich 5 Tabellen mit den Daten aus Autoobjekt füllen, also habe ich 5 Statements

Geht es hier dann um INSERTS oder UPDATES?
Bei INSERTs wäre eine Möglichkeit per INSERT gleich mehere Datensätze einzutragen (sprich immer 100 Autos oder so mit einem Statement einzutragen).
Bei UPDATEs könntest du mal schauen ob du etwas zu PHP mit BULK Operationen findest.

vor dem INSERT seicher in einer Variable die autiID damit ich da schon mal nicht jedes mal abfragen muss

Wie oben schon geschrieben wenn du die Auto Objekte hast sollten die IDs schon dabei sein. Ohne würde man gar nicht sicher gehen können das wirklich dieses oder jenes Auto gemeint ist ;)
Sollte die ID nicht dabei sein (warum auch immer), wäre eine Möglichkeit diese in der Datei schon mitlieferen zu lassen (damit ersparst du dir schon mal die SELECTs für die ID).
Oder anstatt für jedes Auto einzeln abzufragen Frage alle IDs von Autos ab und gehe die Liste durch und ergänze bei jedem Auto die passende ID (somit musst du nur 1 SELECT machen statt 10.000+)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T compiler fehler: should be mapped with insert="false" update="false" Datenbankprogrammierung 1
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
OnDemand Mysql UPDATE if condition Datenbankprogrammierung 14
OnDemand Select vs Update ins blaue, was ist teurer? Datenbankprogrammierung 11
OnDemand MySQL Trigger löst nicht aus bei Hibernate Update Datenbankprogrammierung 12
R HSQLDB ResultSet update aktualisiert DB, aber nicht das ResultSet Datenbankprogrammierung 2
F UPDATE - Befehl nur in einer Zeile Datenbankprogrammierung 11
L SQL-Statement INSERT INTO ON DUPLICATE KEY UPDATE funktioniert nicht Datenbankprogrammierung 5
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
OnDemand Update table SET will nicht Datenbankprogrammierung 9
P MySQL INSERT / UPDATE MySQL - perStoredProcedure oder direkt im Code Datenbankprogrammierung 3
S Update Tabelle aus Textfeld Datenbankprogrammierung 2
S JPA: update von Schlüsselwerten Datenbankprogrammierung 2
ruutaiokwu sql server werte swappen beim update-vorgang mit unique-constraints..? Datenbankprogrammierung 2
M Update Befehl Datenbankprogrammierung 1
S MySQL Nach wiederholtem Update falsche Werte (im Speicher?) Datenbankprogrammierung 1
M SQL-Statement Datentypen in Kriterienausdruck unverdräglich bei Update auf DB von Java aus Datenbankprogrammierung 0
M SQL UPDATE richtig anwenden BITTE um HILFE Datenbankprogrammierung 3
M SQL UPDATE führt zu JAVA Absturz Datenbankprogrammierung 6
S HSQLDB Verbieten eines update auf eine bestimmte reihe Datenbankprogrammierung 4
M Derby/JavaDB Neu geschriebener Eintrag per UPDATE lässt sich nicht unmittelbar abrufen Datenbankprogrammierung 2
S UPDATE user Datenbankprogrammierung 4
R Fehler 2601 trotz SQL-UPDATE ? Datenbankprogrammierung 2
B DB Update via batch Datenbankprogrammierung 3
H Update ganze zeile Datenbankprogrammierung 4
R sqlite UPDATE wirkt nicht aus Java Datenbankprogrammierung 7
S ID Wert von Insert über jdbcTemplate.update Datenbankprogrammierung 3
D Error 1452: Cannot add or update a child row: a foreign key constraint fails Datenbankprogrammierung 15
D SQL Update auf eine Query möglich? Datenbankprogrammierung 4
5 Datenbank Update Datenbankprogrammierung 8
A Oracle Update Befehl in Datenbank anhand einer Schleife Datenbankprogrammierung 8
turmaline Oracle "Häppchenweises" Update durchführen Datenbankprogrammierung 4
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
D ArrayIndexOutOfBoundsException bei Update von JTable und Model Datenbankprogrammierung 13
M Access Update Statement Fehler update -> unmöglich? Datenbankprogrammierung 3
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
I Derby/JavaDB Update Fehler Datenbankprogrammierung 4
N Update Prepared Statement Fehler bei Argumenten Datenbankprogrammierung 3
N batch-Update wird nicht durchgeführt Datenbankprogrammierung 2
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
1 On duplicate Key update Datenbankprogrammierung 3
M DB update geht einfach nicht Datenbankprogrammierung 2
F ResultSet kann Datenbank nicht update, warum? Datenbankprogrammierung 3
G MySQL Update Datenbankprogrammierung 5
M MySQL größere von zwei Zahlen in Update Statement Datenbankprogrammierung 2
T Update an SQL Tabelle ?! Datenbankprogrammierung 10
C MySQL Update funktioniert nicht Datenbankprogrammierung 11
C Update Table1 mit Relationship Table2 Datenbankprogrammierung 6
prakdi einzelnen SQL Eintrag finden der "update" enthält Datenbankprogrammierung 3
V Datenbank Update Datenbankprogrammierung 7
A update methode für datenbank Datenbankprogrammierung 2
M Hibernate: Insert statt Update Datenbankprogrammierung 8
E Update DB; Werte aus Feldern übernehmen Datenbankprogrammierung 5
H Batch Update/Insert Datenbankprogrammierung 4
E Insert oder Update- Prüfung Datenbankprogrammierung 3
H Datenbank Update Datenbankprogrammierung 3
J SQL Abfrage: Verschiedene Werte in einer Spalte mit einem Update Befehl? Datenbankprogrammierung 7
cosmic Problem beim Update einer Oracle DB Datenbankprogrammierung 7
M Update mysql Fehler ?? Datenbankprogrammierung 4
T Problem beim Update in die Access DB Datenbankprogrammierung 9
R Update Time auslesen Datenbankprogrammierung 2
T DB2 delete/update über 2 Tabellen Datenbankprogrammierung 2
K Ist mein UPDATE fehlerhaft? Datenbankprogrammierung 3
G Update-Befehl Fehlerhaft ?? Datenbankprogrammierung 2
G Update Befehl funkt nicht. WARUM? Datenbankprogrammierung 5
S Update Problem Datenbankprogrammierung 3
M Insert Update usw. Datenbankprogrammierung 2
S CashedRowSet update - oder was mache ich falsch - Datenbankprogrammierung 6
B [SQL] UPDATE oder REPLACE INTO Befehl Datenbankprogrammierung 10
S Update mit null Datenbankprogrammierung 11
H UPDATE . Datenbankprogrammierung 3
S PostgreSQL SELECT/UPDATE etc. Datenbankprogrammierung 4
T Update-Frage Datenbankprogrammierung 11
Y Hibernate - Update bestimmter Spalten Datenbankprogrammierung 2
G update sperren bei client/server anwendung Datenbankprogrammierung 7
T Diverse JDBC Probleme (inner join, rs.last(), update) Datenbankprogrammierung 2
B Update funktioniert nicht Datenbankprogrammierung 8
R Update und Insert Gleichzeitig? Datenbankprogrammierung 2
K MsAccess immer beim zweiten Update java.sql.SQLException Datenbankprogrammierung 28
N Hibernate & hsqldb: Problem bei db-update Datenbankprogrammierung 7
T Problem beim Update vom Resultset + Firebird Datenbankprogrammierung 2
G Update Statement automatisch unterteilen lassen Datenbankprogrammierung 3
G ist hieran was falsch ? UPDATE Anweisung Datenbankprogrammierung 8
W Hibernate Update Problem Datenbankprogrammierung 3
A Syntaxfehler bei update. Datenbankprogrammierung 8
O Update-Problem mit Hibernate-Framework Datenbankprogrammierung 5
L Problem mit Update Datenbankprogrammierung 14
L UPDATE löst Exception aus Datenbankprogrammierung 6
G Problem mit Datums-Format bei UPDATE Datenbankprogrammierung 3
F Update mit Prepared Statements Datenbankprogrammierung 10
G sqlite innerjoin Datenbankprogrammierung 5

Ähnliche Java Themen


Oben