Mysql UPDATE if condition

OnDemand

Top Contributor
Hallo zusammen,

hab grad ein Brett vorm Kopf und bekomme einen Updatequery für folgenden Fall Nicht zusammen:

hab 2 Tabellen

Tabelle A
id
updateable

Tabelle B
id
value

Ich möchte den value in Tabelle B nur updaten, wenn Tabelle a updateable = true ist

Wie kann ich das in einem UPDATE Query realisieren?
 
K

kneitzel

Gast
Da sollte sowas helfen:

Du hast also in dem UPDATE Befehl ein Join auf die zweite Tabelle und änderst dann nur, wenn der Wert entsprechend ist.

Das könnte dann etwas in der Art hinaus laufen:
UPDATE B
JOIN A ON A.id = B.id
SET B.value = newValue
WHERE B.id=someId
 

mihe7

Top Contributor
Kaum fängt man an zu schreiben, kommt schon @JustNobody daher... :)

Dann halt Alternativen:

UPDATE TabelleB SET value = 5 WHERE id IN (SELECT id FROM TabelleA WHERE updateable=true)

UPDATE TabelleB SET value = 5 WHERE EXISTS (SELECT id FROM TabelleA INNER JOIN TabelleB ON TabelleA.id=TabelleB.id WHERE updateable=true)
 

OnDemand

Top Contributor
Ah join die hab ich immer gemieden. Ich fürchte ich muss mal kapieren :D

Das mit dem Select ist auch cool, gibts performance unterschiede zwischen den Varianten?
 
K

kneitzel

Gast
UPDATE TabelleB SET value = 5 WHERE EXISTS (SELECT id FROM TabelleA INNER JOIN TabelleB ON TabelleA.id=TabelleB.id WHERE updateable=true)

Das habe ich jetzt nicht ausprobiert, aber da wäre meine Erwartungshaltung, dass er - sobald er in TabelleA einen entsprechenden Eintrag mit id und upateable=true sowie einen Eintrag in B mit der id findet eben alle Datensätze von Tabelle B ändert.
Denn die Bedingung im inneren Select ist entweder erfüllt oder nicht erfüllt - unabhängig von der äußeren UPDATE Anweisung.
Oder habe ich da jetzt einen Denkfehler?Aber ich hätte das INNER JOIN aus dem inneren SELECT heraus genommen und dann halt die id von TabelleB aus der dem äußeren Select genommen...

Ah join die hab ich immer gemieden. Ich fürchte ich muss mal kapieren :D

Das mit dem Select ist auch cool, gibts performance unterschiede zwischen den Varianten?

Das ist so Auf Anhieb nicht zu sagen. Bei MS SQL hätte ich mir einmal den Execution Plan für die Abfragen anzeigen lassen. Erfahrungsgemäß kommt da sehr oft durch die interne Optimierung das Gleiche raus.
Aber bei den inneren Selects kannes zu ganz bösen Effekten kommen, die man eben sonst nicht hat. Das kann ganz böse laufen (Ich hatte da schon ein paar Mal, dass ich Dritten helfen musste, weil ihre Abfragen auf Timeouts liefen und irgenwann war man der Meinung, dass es doof ist, überall höhere Timeouts als Workaround einzubauen und Nutzer Minuten auf Berichte warten zu lassen :) )
 
K

kneitzel

Gast
Kaum fängt man an zu schreiben, kommt schon @JustNobody daher... :)

Das ist übrigens mein "mihe7 antwortet Detektor". Der spinnt aber in letzter Zeit, daher schreibe ich etwas weniger. Es macht halt keinen Spass, wenn man nicht einfach kurz vor Dir antworten kann .... (Ok, böse Zungen behaupten, dass ich derzeit Urlaub habe und da andere Prioritäten habe ... Aber das sind natürlich reine Verschwörungstheorien - auf einer Stufe mit "Bielefeld existiert", "Die Erde ist rund" und "Trump ist kein Außerirdischer".)
 

mihe7

Top Contributor
Das habe ich jetzt nicht ausprobiert, aber da wäre meine Erwartungshaltung, dass er - sobald er in TabelleA einen entsprechenden Eintrag mit id und upateable=true sowie einen Eintrag in B mit der id findet eben alle Datensätze von Tabelle B ändert.
Örks, Du mit Deinem JOIN hast mich ganz verwirrt :)

So war das gemeint:

UPDATE TabelleB SET value = 5 WHERE EXISTS (SELECT id FROM TabelleA WHERE TabelleA.id=TabelleB.id AND updateable=true)
 
K

kneitzel

Gast
Örks, Du mit Deinem JOIN hast mich ganz verwirrt :)

So war das gemeint:

UPDATE TabelleB SET value = 5 WHERE EXISTS (SELECT id FROM TabelleA WHERE TabelleA.id=TabelleB.id AND updateable=true)

Ja, so halte ich es auf den ersten Blick auch für korrekt.

Ein join ist in 90% der Fälle die performantere Lösung. Von Der besseren Lesbarkeit mal ganz abgesehen
Dem stimme ich aber auch noch zu, auch wenn es Fälle gibt, in denen die Performance gleich ist.

Kleiner Exkurs - viel persönliche Sicht und der werden einige nicht zustimmen:
Bei den Queries würde ich dies bei MS SQL erwarten, mysql ist aber halt in meinen Augen keine ernst zu nehmende Datenbank - aber das liegt einfach nur daran, dass mein Kontakt zu mysql zu einer Zeit war, in der keine foreign keys unterstützt wurden so die Tabellen im bevorzugten Datenbank-Format geschrieben wurden... Relationale Datenbank ohne Foreign Keys? Das prägt ganz schön :) ... Aber klar: das war damals, heute ist mysql besser. Ich habe es selbst "produktiv" im Einsatz bei einem Kunden, aber die Backups in Form von SQL Scripten mit den teilweise damit verbundenen Problemen bezüglich Collation? So gewisse Dinge kann ich immer noch nicht so ganz nachvollziehen und "enterprise level" ist bei mir doch etwas anderes ... zumal da oracle hinter steckt ... Da sinken die Erwartungshaltungen gleich massiv ... die einzige Erwartung, die da immer erfüllt wird: Man wird garantiert sein Geld los :)
 
K

kneitzel

Gast
mysql ist halt "historisch bedingt" die Datenbank fürs Web. Ich frage mich, warum PostgreSQL nicht stärker verbreitet ist, oder ist das mittlerweile anders?

Also in meinem Bekanntenkreis ist das die bevorzugte Wahl. Aber irgendwie hat sich mysql massiv im markt durchgesetzt. Unverständlich. zumal das am Anfang ja kaum etwas bot. Aber das war vielleicht das reizvolle für Anfänger: Super - da muss man viel weniger lernen. Bei PostgreSQL erzählen die "Profis" einem immer Dinge, die man machen müsste für Dinge, die man nicht kennt und auch gar nicht will ... ein Integriertes Referat ... referiertes Integral? Ein Integren Referenten? Siehst Du: Ich komme noch nicht einmal mehr auf den Begriff "referentielle Integrität" und wenn man den Begriff nicht merken kann, dann kann es nur unwichtig sein ...
 
K

kneitzel

Gast
Hört sich eher nach Access an :)
Ach, das ist doch super. Access ist geil. Du brauchst gar keine Datenbank Kenntnisse! Du klickst dir einfach Tabellen zusammen, verbindest die u.s.w.
Dann baust Abfragen (vergleichbar mit View) ... fängst klein an ... und dann baust du Abfragen auf Abfragen ... Alles super!

Und dann packst Du das einfach auf einen SQL Server. Oder Du hast es schon immer mit SQL Backend entwickelt. Total genial!

Und wie man Timeouts so einstellt, das eine Abfrage auf eine View auch über Nacht laufen kann, das ist dann ein Spezialwissen, das man bei sowas dann auch schnell bekommt.

Vor allem unbezahlbar: Man sagt DB Admins, das sie gewisse Timeouts einstellen sollen ... Der Moment, in dem die Admins verstehen, was da verlangt wird, ist unbezahlbar.

Und für IT Dienstleister ist das top: So kriegt man schnell noch einen zweiten Datenbank Cluster. :)
Darf halt nur nie ein Kunde auf die Cluster schauen :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
P MySQL INSERT / UPDATE MySQL - perStoredProcedure oder direkt im Code Datenbankprogrammierung 3
G MySQL Update Datenbankprogrammierung 5
M Update mysql Fehler ?? Datenbankprogrammierung 4
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
W MySQL-Connector funktioniert nicht über WLAN -> MacOS Datenbankprogrammierung 10
Juelin MySQL Datenbankmit glassfish und Netbeans Datenbankprogrammierung 18
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
Warum funktioniert MySQL nicht Datenbankprogrammierung 8
M MySQL Datenbank in Array Datenbankprogrammierung 2
P MySQL- Neues Passwort Datenbankprogrammierung 1
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
sserio SQL oder MySQL Datenbankprogrammierung 44
OnDemand Mysql Query Builder Datenbankprogrammierung 1
Z MySQL "Too many connections" auch nach schliessen der Connections. Datenbankprogrammierung 10
yakazuqi MySQL MySQL Connection reset Datenbankprogrammierung 7
OnDemand MySql Foreign Key nötig oder unnötig Datenbankprogrammierung 3
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
OnDemand MySQL und mongoDB wann macht was Sinn? Datenbankprogrammierung 11
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
D MYSQL goorm IDE - Wie speichern? Datenbankprogrammierung 0
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
J MySQL - Primary Key Date,Time vs ID Datenbankprogrammierung 16
ruutaiokwu MySQL: Messwerte, welche stagnieren interpolieren? Datenbankprogrammierung 2
S Datenbank MySQL und Java Datenbankprogrammierung 8
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
J MySQL MySQL Risiken bei Stromausfall minimieren Datenbankprogrammierung 9
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
D MySQL Connection richtig herstellen. Wie ? Datenbankprogrammierung 7
D Multiple Connection mit MySQL Datenbankprogrammierung 4
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
D MySQL Zeilen kumulieren Datenbankprogrammierung 8
D MySQL Abfrage mit kumulierten Werten Datenbankprogrammierung 16
K Servlet-MySQL DB Datenbankprogrammierung 2
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
D Datumsformat aus MySQL ändern Datenbankprogrammierung 15
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K MySQL LAN-MySQL Server mit XAMPP Datenbankprogrammierung 2
R ERModel der Datebanken (ORACLE,MySQL,MS-SQL usw) Datenbankprogrammierung 4
X MySQL In MySQL Funktionen erstellen, wenn Zelle leer dann andere Zelle ändern? Datenbankprogrammierung 9
K Anfängerfrage CSV in MySQL Datenbankprogrammierung 41
I MySQL Wert nachträglich bearbeiten Datenbankprogrammierung 1
N MySQL Datenbank lokal Datenbankprogrammierung 3
B MySQL: Port ändern über GUI? Wo und wie Port ändern? Datenbankprogrammierung 0
B MySQL installieren - silent / User anlegen Datenbankprogrammierung 3
X MySQL Verbindungdsaufbau MySql auf Ubuntu-Server Datenbankprogrammierung 10
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
P MySQL JPA / MySQL - Fehler bei type=innoDB Datenbankprogrammierung 8
M MySQL MySQL DATETIME-Import Datenbankprogrammierung 9
P MySQL Connection Global Datenbankprogrammierung 13
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
P MySQL-Verbindung in anderer Klasse nutzen Datenbankprogrammierung 2
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
D MySQL Grundsätzliche Fragen zu MySQL Datenbankprogrammierung 3
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
M In MySql Datenbank schreiben Datenbankprogrammierung 6
D mySQL Timestamp in RegularTimePeriod bzw Second Datenbankprogrammierung 3
H SHOW Tables in Java/MySQL Datenbankprogrammierung 8
windl MySQL und HSQLDB Datenbankprogrammierung 4
S Anbindung zur mysql von mit Swing und AWT Datenbankprogrammierung 22
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
C MYSQL kann wert nicht eintragen Datenbankprogrammierung 3
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
F BPlaced MySql Datenbank ansprechen Datenbankprogrammierung 5
S MySQL MySQL will einfach nicht, bitte um Rat Datenbankprogrammierung 4
M MySQL Datenbank durchsuchen Datenbankprogrammierung 5
Z MySQL mysql Facharbeit: Tipps und Ideen gesucht Datenbankprogrammierung 5
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
K MySQL Datenbank 2facher Zugriff Datenbankprogrammierung 1
Z MySQL Shopsystem mit mysql und Java Datenbankprogrammierung 8
S [MySQL] Topliste Datenbankprogrammierung 2
H Datenbank-Anbindung Java/MySQL Datenbankprogrammierung 2
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
J Dateien in MySQL speichern & indizieren Datenbankprogrammierung 2
B MySQL MySQL-Abfrage von aufsummierter Zeit Datenbankprogrammierung 3
K MySQL Datenbankbackups Datenbankprogrammierung 5
kaoZ HyperSQL vs. MYSQL Datenbankprogrammierung 4
L JSONArray/JSONObject MySQL-Servlet Abfrage Datenbankprogrammierung 2
V Internationalization mit MySql Datenbankprogrammierung 1
K Adressverwaltung mit MySql und Java? Datenbankprogrammierung 11
M Java Mysql verbinden Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben