Ich versuche zu verstehen, wie man mehrere Zeilen mit unterschiedlichen Werten aktualisiert, und ich verstehe es einfach nicht. Die Lösung ist überall, aber für mich sieht es schwer zu verstehen aus.
Zum Beispiel drei Aktualisierungen in einer Abfrage:
UPDATE table_users
SET cod_user = '622057'
, date = '12082014'
WHERE user_rol = 'student'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '2913659'
, date = '12082014'
WHERE user_rol = 'assistant'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '6160230'
, date = '12082014'
WHERE user_rol = 'admin'
AND cod_office = '17389551';
Ich habe ein Beispiel gelesen , aber ich verstehe wirklich nicht, wie ich die Abfrage machen soll. dh:
UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
Ich bin mir nicht ganz sicher, wie ich die Abfrage durchführen soll, wenn die WHERE- und die IF-Bedingung mehrere Bedingungen enthalten.
mysql
sql
sql-update
franvergara66
quelle
quelle
Antworten:
Sie können es so machen:
Ich verstehe Ihr Datumsformat nicht. Daten sollten mit nativen Datums- und Uhrzeittypen in der Datenbank gespeichert werden.
quelle
update
s wirken sich nur auf bereits vorhandene Datensätze aus.cod_user
es sich um einen Primärschlüssel handelt und die Werte gemischt werden, sind mehrere Aktualisierungen wahrscheinlich die beste Route.MySQL bietet eine besser lesbare Möglichkeit, mehrere Updates in einer einzigen Abfrage zu kombinieren. Dies scheint besser zu dem von Ihnen beschriebenen Szenario zu passen, ist viel einfacher zu lesen und vermeidet diese schwer zu entwirrenden Mehrfachbedingungen.
Dies setzt voraus, dass die
user_rol, cod_office
Kombination ein Primärschlüssel ist. Wenn nur einer davon der Primärschlüssel ist , fügen Sie das andere Feld zur UPDATE-Liste hinzu. Wenn keiner von beiden ein Primärschlüssel ist (was unwahrscheinlich erscheint), werden bei diesem Ansatz immer neue Datensätze erstellt - wahrscheinlich nicht das, was gewünscht wird.Dieser Ansatz macht es jedoch einfacher, vorbereitete Aussagen zu erstellen und präziser zu gestalten.
quelle
cod_user=VALUES(cod_user), ...
nicht aus offiziellen MySQL 5.6-DokumentenSie können eine
CASE
Anweisung verwenden, um mehrere if / then-Szenarien zu behandeln:quelle
quelle
Um die Antwort von @Trevedhek zu erweitern ,
Falls das Update mit nicht eindeutigen Schlüsseln durchgeführt werden muss, sind 4 Abfragen erforderlich
HINWEIS: Dies ist nicht transaktionssicher
Dies kann mithilfe einer temporären Tabelle erfolgen.
Schritt 1: Erstellen Sie temporäre Tabellenschlüssel und die Spalten, die Sie aktualisieren möchten
Schritt 2: Fügen Sie die Werte in die temporäre Tabelle ein
Schritt 3: Aktualisieren Sie die ursprüngliche Tabelle
Schritt 4: Löschen Sie die temporäre Tabelle
quelle
Hier sind col4 & col1 in Tabelle 1. col2 & col3 befinden sich in Tabelle 2.
Ich versuche, jedes col1 zu aktualisieren, wobei col4 = col3 für jede Zeile einen anderen Wert hat
quelle
Ich habe es so gemacht:
wo PushSettings ist
es funktioniert gut
quelle