Ich hoffe, das hat Sinn gemacht, lassen Sie mich näher darauf eingehen:
Es gibt eine Tabelle mit Tracking-Daten für ein Quizprogramm, in dem jede Zeile ..
QuestionID und AnswerID (es gibt jeweils eine Tabelle). Aufgrund eines Fehlers wurden einige QuestionIDs auf NULL gesetzt, aber die QuestionID einer verwandten AnswerID befindet sich in der Answers-Tabelle.
Angenommen, QuestionID ist NULL und AnswerID ist 500. Wenn wir in der Tabelle Answers nach AnswerID 500 suchen, gibt es eine Spalte mit der QuestionID, in der sich der NULL-Wert befinden sollte.
Im Grunde möchte ich festlegen, dass jede NULL-Frage-ID gleich der Frage-ID ist, die in der Antworttabelle in der Antwortzeile der Antwort-ID in der Verfolgungstabelle gefunden wird (dieselbe Zeile wie die NULL-Frage-ID, die geschrieben wird).
Wie würde ich das machen?
UPDATE QuestionTrackings
SET QuestionID = (need some select query that will get the QuestionID from the AnswerID in this row)
WHERE QuestionID is NULL AND ... ?
Ich bin mir nicht sicher, wie ich die QuestionID aus der passenden AnswerID der QuestionID zuweisen kann ...
Antworten:
Ich empfehle, vor dem Ausführen des Updates zu überprüfen, welche Ergebnismenge aktualisiert werden soll (dieselbe Abfrage, nur mit einer Auswahl):
Insbesondere, ob jeder Antwort-ID definitiv nur eine Frage-ID zugeordnet ist.
quelle
update QuestionTrackings q inner join QuestionAnswers a on q.AnswerID = a.AnswerID set q.QuestionID = a.QuestionID;
scheint dieselbe grundlegende Abfrage in einer anderen Reihenfolge zu sein. Irgendeine Idee warum?UPDATE table1 NATURAL JOIN table2 SET table1.col1 = table1.col2 WHERE table2.col3 ="condition"
Verwenden Sie ohne die Update-and-Join-Notation (nicht alle DBMS unterstützen dies):
In einer solchen Abfrage müssen Sie die WHERE-Klausel häufig mit einer EXISTS-Klausel qualifizieren, die die Unterabfrage enthält. Dies verhindert, dass das UPDATE über Zeilen trampelt, in denen keine Übereinstimmung vorliegt (normalerweise werden alle Werte auf Null gesetzt). In diesem Fall spielt es wohl keine Rolle, da eine fehlende Fragen-ID NULL in NULL ändern würde.
quelle
Ich weiß nicht, ob Sie auf MySQL Workbench auf dasselbe Problem gestoßen sind wie ich, aber das Ausführen der Abfrage mit der
INNER JOIN
After-FROM
Anweisung hat bei mir nicht funktioniert. Ich konnte die Abfrage nicht ausführen, da sich das Programm über dieFROM
Anweisung beschwert hat .Damit die Abfrage funktioniert, habe ich sie in geändert
anstatt
Ich denke, meine Lösung ist die richtige Syntax für MySQL.
quelle
quelle
Ich hatte die gleiche Frage. Hier ist eine funktionierende Lösung, die der von eglasius ähnelt. Ich benutze postgresql.
Es wird beanstandet, ob q anstelle des Tabellennamens in Zeile 1 verwendet wurde und der Frage-ID in Zeile 2 nichts vorausgehen sollte.
quelle
quelle
Für MySQL können Sie diese Abfrage verwenden
UPDATE Tabelle1 a, Tabelle2 b SET a.coloumn = b.coloumn WHERE a.id = b.id.
quelle
Aktualisieren Sie die Daten der 2. Tabelle in der 1. Tabelle, um sie vor SET zu verbinden:
quelle
unten funktioniert für MySQL
quelle
Ich denke das sollte funktionieren.
quelle