Freunde, die über Grundkenntnisse in SQL verfügen, haben sicherlich schon von „Cross-Table-Abfragen“ gehört, aber was ist eine Cross-Table-Aktualisierung? Hintergrund Das Projekt hat einen neuen Stapel Personaldaten importiert. Die Abteilungsnamen einiger dieser Personen haben sich geändert, und einige ihrer Kontaktinformationen haben sich geändert. Nennen wir diese Tabelle Silly SQL wird sofort beendet Ohne nachzudenken schrieb ich das folgende SQL Als ich sah, dass DBA Xiao Duan hinter mir übte, dachte ich daran, ihn zu bitten, mir beim Polieren zu helfen 😜, also schickte ich es ihm und dann kam es so zurück: Ich war fassungslos, als ich diese SQL-Anweisung sah. Wie konnte sie so geschrieben werden? Unter dem gnadenlosen Spott fiel ich mit einem „KO“ zu Boden. Du musst wissentlich sterben. Wir müssen herausfinden, was los ist. Mysql Update Join Wir verwenden In ähnlicher Weise können wir in MySQL auch die JOIN-Klausel in der UPDATE-Anweisung verwenden, um tabellenübergreifende Aktualisierungen durchzuführen. Die Syntax lautet wie folgt: AKTUALISIERUNG T1, T2, [INNER JOIN | LEFT JOIN] T1 AUF T1.C1 = T2.C1 SETZE T1.C2 = T2.C2, T2.C3 = Ausdruck WHERE-Bedingung Lassen Sie uns die obige Syntax im Detail erklären: Geben Sie zunächst nach der UPDATE-Klausel die Primärtabelle (T1) und die Tabelle (T2) an, mit der die Primärtabelle verknüpft werden soll. Beachten Sie, dass Sie nach der UPDATE-Klausel mindestens eine Tabelle angeben müssen. Geben Sie als Nächstes den gewünschten Join-Typ (INNER JOIN oder LEFT JOIN) und das Join-Prädikat an. Die JOIN-Klausel muss nach der UPDATE-Klausel stehen (das weiß jeder). Weisen Sie dann den zu aktualisierenden Spalten in der Tabelle T1 oder T2 neue Werte zu. Geben Sie abschließend in der WHERE-Klausel eine Bedingung an, um die Zeilen auf die zu aktualisierenden zu beschränken. Wenn Sie der Update-Syntax folgen, werden Sie feststellen, dass es eine andere Syntax gibt, mit der auch tabellenübergreifende Updates durchgeführt werden können AKTUALISIERUNG T1, T2 SETZE T1.c2 = T2.c2, T2.c3 = Ausdruck WO T1.c1 = T2.c1 UND Bedingung Die obige Syntax verwendet tatsächlich implizit das Schlüsselwort „inner join“, was genau dem Folgenden entspricht: AKTUALISIERUNG T1, T2 INNER JOIN T2 AUF T1.C1 = T2.C1 SETZE T1.C2 = T2.C2, T2.C3 = Ausdruck WHERE-Bedingung Mein persönlicher Vorschlag ist, das Schlüsselwort Ich habe das hier beim Scherzen gesehen und ich glaube, es ist eine Seelenübersetzung Update-Join-Beispiel Das Jahresende ist da und es ist Zeit, die Leistung zu bewerten, das sogenannte KPI (haben Sie das?). Ich habe gehört, dass Gehälter auf der Grundlage des KPI angepasst werden. Es gibt zwei Tische Die erste Tabelle ist "Mitarbeiter" Die Anweisung zur Tabellenerstellung lautet wie folgt: Tabelle „Mitarbeiter“ erstellen ( employee_id bigint auto_increment Kommentar 'Mitarbeiter-ID, Primärschlüssel', employee_name varchar(50) null Kommentar 'Mitarbeitername', performance int(4) null Kommentar 'Leistungsbewertung 1, 2, 3, 4, 5', Gehalt Float Null Kommentar 'Mitarbeitergehalt', Einschränkung Mitarbeiter_pk Primärschlüssel (employee_id) ) Kommentar 'Mitarbeitertabelle'; Die zweite Tabelle ist die „Verdienst-Leistungs-Wörterbuchtabelle“. Die Anweisung zur Tabellenerstellung lautet wie folgt: Tabelle erstellen Verdienste ( Leistung int(4) null, Prozentsatz Float Null ) Kommentar „Leistungswörterbuchtabelle“; Generieren Sie zunächst einige simulierte Daten - Initialisieren Sie die Leistungswörterbuchdaten INSERT INTO merits(performance, percentage) WERTE (1, 0), (2, 0,01), (3, 0,03), (4, 0,05), (5, 0,08); -- Initialisieren Sie die Daten in der Mitarbeitertabelle INSERT INTO employee(employee_name, performance, salary) WERTE ('Gong Ge', 1, 1000), ('Xiao Duanzong', 3, 20000), ('Erwachsene', 4, 18000), ('Kommandant', 5, 28000), ('Alte Sechs', 2, 10000), ('Romon', 3, 20000); Regeln zur Gehaltsanpassung: Verfassen Sie Aktualisierungsbescheide nach den Regeln zur Gehaltsanpassung: UPDATE Mitarbeiter Innerer Join Verdienste EIN Mitarbeiter.Leistung = Verdienste.Leistung SET-Gehalt = Gehalt + Gehalt * Prozentsatz; Gong Ges Leistung war nicht gut, deshalb bekam er keine Gehaltserhöhung … Drei horizontale Linien, eine vertikale Linie und ein Kuckuck, vier kleine Schweinchen kommen, um Zha zu essen, Kuckuck, Kuckuck, zwei weitere kommen Gegen Ende des Jahres kamen zwei neue Kollegen in das Unternehmen, aber die jährliche Leistungsbeurteilung des Unternehmens wurde bereits abgeschlossen, sodass die Leistung der neuen Mitarbeiter NULL ist. INSERT INTO Mitarbeiter (Mitarbeitername, Leistung, Gehalt) VALUES ('Wert', NULL, 8000), ('Zurück', NULL, 5000); Bei guter Leistung soll der neue Mitarbeiter zudem eine Gehaltserhöhung UPDATE Mitarbeiter LINKS VERBINDEN Verdienste EIN Mitarbeiter.Leistung = Verdienste.Leistung SET Gehalt = Gehalt + Gehalt * 0,015 Wobei merits.percentage NULL ist; Zu diesem Zeitpunkt war auch die Gehaltserhöhung für neue Mitarbeiter abgeschlossen. Gong Ge ging beschämt nach Hause, um das neue Jahr zu feiern, weil er die Wissenspunkte nicht gründlich verstanden hatte. Das könnte Sie auch interessieren:
|
<<: Vue implementiert Benutzeranmeldung und Token-Verifizierung
>>: Nexus verwendet Nginx-Proxy zur Unterstützung des HTTPS-Protokolls
Wie schreibt man „join“? Wenn Sie „Left Join“ ver...
Inhaltsverzeichnis 1. Was ist eine doppelt verknü...
Um uns auf dem Server schnell bei der Datenbank a...
Vorwort Kürzlich stieß ich bei der Arbeit auf ein...
Ich habe das von Alibaba Cloud gekaufte CentOS fü...
Rufen Sie die Alibaba-Vektorsymbolbibliothek auf ...
Inhaltsverzeichnis 1. Warum Slots verwenden? 1.1 ...
Hash-Modus (Standard) Funktionsprinzip: Überwache...
Tipps zur Verwendung von Docker 1. Bereinigen Sie...
Inhaltsverzeichnis Was ist JSONP JSONP-Prinzip JS...
Vorwort Alle Anfragen in Tomcat werden von Servle...
Centos7-Startvorgang: 1.post (Selbsttest beim Ein...
HTML-Semantik scheint ein alltägliches Problem zu...
Bei Verwendung des Layouts justify-content:space-...
Notieren Sie die Probleme, die Sie für andere lös...