J'espère que cela a du sens, laissez-moi élaborer:
Il existe un tableau de données de suivi pour un programme de quiz où chaque ligne a ..
QuestionID et AnswerID (il y a un tableau pour chacun). Donc, à cause d'un bogue, il y avait un tas de QuestionIDs définis sur NULL, mais le QuestionID d'un AnswerID associé est dans le tableau Answers.
Donc, disons que QuestionID est NULL et AnswerID est 500, si nous allons à la table Answers et trouvons AnswerID 500, il y a une colonne avec le QuestionID qui aurait dû être là où la valeur NULL est.
Donc, fondamentalement, je veux définir chaque QuestionID NULL pour être égal au QuestionID trouvé dans le tableau Answers sur la ligne Answer de l'AnswerID qui se trouve dans la table de suivi (même ligne que le QuestionID NULL qui est en cours d'écriture).
Comment ferais-je ça?
UPDATE QuestionTrackings
SET QuestionID = (need some select query that will get the QuestionID from the AnswerID in this row)
WHERE QuestionID is NULL AND ... ?
Je ne sais pas comment je pourrai lui faire attribuer le QuestionID au QuestionID à partir du AnswerID correspondant ...
Réponses:
Je recommande de vérifier le jeu de résultats à mettre à jour avant d'exécuter la mise à jour (même requête, juste avec une sélection):
En particulier, si chaque identifiant de réponse n'a définitivement qu'un seul identifiant de question associé.
la source
update QuestionTrackings q inner join QuestionAnswers a on q.AnswerID = a.AnswerID set q.QuestionID = a.QuestionID;
semble être la même requête de base dans un ordre différent. une idée pourquoi?UPDATE table1 NATURAL JOIN table2 SET table1.col1 = table1.col2 WHERE table2.col3 ="condition"
Sans la notation de mise à jour et de jointure (tous les SGBD ne le prennent pas en charge), utilisez:
Souvent, dans une requête comme celle-ci, vous devez qualifier la clause WHERE avec une clause EXISTS qui contient la sous-requête. Cela empêche UPDATE de piétiner les lignes où il n'y a pas de correspondance (annulant généralement toutes les valeurs). Dans ce cas, étant donné qu'un ID de question manquant changerait NULL en NULL, cela n'a sans doute pas d'importance.
la source
Je ne sais pas si vous avez rencontré le même problème que moi sur MySQL Workbench, mais l'exécution de la requête avec
INNER JOIN
l'FROM
instruction après l' instruction n'a pas fonctionné pour moi. Je n'ai pas pu exécuter la requête car le programme s'est plaint de laFROM
déclaration.Donc, pour que la requête fonctionne, je l'ai changée en
au lieu de
Je suppose que ma solution est la bonne syntaxe pour MySQL.
la source
la source
J'avais la même question. Voici une solution de travail similaire à celle d'eglasius. J'utilise postgresql.
Il se plaint si q a été utilisé à la place du nom de table à la ligne 1, et que rien ne doit précéder QuestionID à la ligne 2.
la source
la source
Pour Mysql, vous pouvez utiliser cette requête
UPDATE table1 a, table2 b SET a.coloumn = b.coloumn WHERE a.id = b.id
la source
Mettre à jour les données de la 2ème table dans la 1ère table doivent être jointes internes avant SET:
la source
ci-dessous fonctionne pour mysql
la source
Je pense que cela devrait fonctionner.
la source