Ich habe eine „Schlüssel“ Datei (Mächtigkeit Reihenfolge), die wie folgt aussieht:Need UPDATE-Anweisung forumulate basierend auf entsprechenden Wert
ID
Name
Job
Dann habe ich eine bearbeitete bin.log aus einer fehlerhaften Update-Anweisung in der folgendes Format:
1
'Joe'
'Grocer'
2
'Bill'
'Mason'
Was muss ich tun, um die entsprechenden „Schlüssel“ Datei, Update-Anweisungen zu formulieren, so das Ergebnis ist wie folgt:
update database.table set Name='Joe', Job='Grocer' WHERE ID=1;
update database.table set Name='Bill', Job='Mason' WHERE ID=2;
Diese müssen jedoch für mehrere Datenspalten arbeiten. Das erste Feld in der Schlüsseldatei wird immer ein einzelner Primärschlüssel sein. Mit anderen Worten, die WHERE-Klausel in der update-Anweisung verwendet immer diese Zeile in der Schlüsseldatei. Alles unter der ersten Zeile in der Schlüsseldatei sind die Spalten, die in der Reihenfolge, in der sie auftreten, "SET" sein müssen.
In diesem Beispiel wird ID die Spalte in der WHERE-Klausel sein, und "Name" wird zuerst auf die entsprechende Zeile in bin.log und dann auf "Job" usw. gesetzt. Nur in diesem Beispiel hat drei Zeilen in der Schlüsseldatei, kann es eine beliebige Anzahl von Zeilen geben. Die erste Zeile wird jedoch immer die Spalte sein, die für das Ende der WHERE-Anweisung der Update-Anweisung verwendet wird.
Konzeptionell habe ich versucht, Zeilenanzahl von beiden Dateien zu bekommen und eine Weile innerhalb einer Weile zu laufen, aber ich kann nicht die richtige Logik bekommen. Um ehrlich zu sein. Ich habe einige Beispiele angeführt, bei denen ich genau wusste, wie viele Zeilen ich bekam, aber diese willkürliche Menge verursacht mir einige Verwirrung. Ich habe auch darüber nachgedacht, Text vor jeder Zeile anzuhängen und dann awk zu verwenden, um die Felder in verschiedenen Positionen einzufügen, aber keine davon scheint eine gute Idee zu sein. – user3299633