J'espère que cela a du sens, laissez-moi élaborer:
Il existe un tableau de suivi des données pour un programme de quiz où chaque ligne a ..
QuestionID et AnswerID (il y a une table pour chacun). Ainsi, à cause d'un bogue, un ensemble de questions d'identification a été défini sur NULL, mais le numéro d'identification de la question d'un identificateur associé est dans la table des réponses.
Donc, disons que QuestionID est NULL et que AnswerID est 500, si nous allons dans la table Réponses et trouvons le AnswerID 500, il y a une colonne avec le QuestionID qui aurait dû être où la valeur NULL est.
En gros, je veux donc que chaque QuestionID NULL soit égal à celui de la question Réponses figurant dans la table Réponses de la ligne Réponse du IDRépid qui se trouve dans la table de suivi (même ligne que la QuestionID NULL en cours d’écriture).
Comment je ferais ç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 vais pouvoir lui faire assigner le QuestionID au QuestionID à partir du AnswerID correspondant ...
update q
set q.QuestionID = a.QuestionID
from QuestionTrackings q
inner join QuestionAnswers a
on q.AnswerID = a.AnswerID
where q.QuestionID is null -- and other conditions you might want
Je recommande de vérifier quel est le résultat à mettre à jour avant de lancer la mise à jour (même requête, avec un select)
select *
from QuestionTrackings q
inner join QuestionAnswers a
on q.AnswerID = a.AnswerID
where q.QuestionID is null -- and other conditions you might want
En particulier si chaque identifiant de réponse n'a définitivement qu'un identifiant de question associé.
Sans la notation update-and-join (ce n'est pas tout le SGBD qui prend en charge cela), utilisez:
UPDATE QuestionTrackings
SET QuestionID = (SELECT QuestionID
FROM AnswerTrackings
WHERE AnswerTrackings.AnswerID = QuestionTrackings.AnswerID)
WHERE QuestionID IS NULL
AND EXISTS(SELECT QuestionID
FROM AnswerTrackings
WHERE AnswerTrackings.AnswerID = QuestionTrackings.AnswerID)
Souvent, dans une requête comme celle-ci, vous devez qualifier la clause WHERE avec une clause EXISTS contenant la sous-requête. Cela empêche la mise à jour de piétiner les lignes où il n'y a pas de correspondance (généralement en annulant toutes les valeurs). Dans ce cas, puisqu'un identifiant de question manquant changerait NULL en NULL, cela n'a sans doute aucune importance.
Je ne sais pas si vous avez rencontré le même problème que moi sur MySQL Workbench, mais exécuter la requête avec le code INNER JOIN
après l'instruction FROM
ne fonctionnait pas pour moi. Je n'ai pas pu exécuter la requête car le programme s'est plaint de l'instruction FROM
.
Donc, afin de faire fonctionner la requête, je l'ai changé pour
UPDATE table1 INNER JOIN table2 on table1.column1 = table2.column1
SET table1.column2 = table2.column4
WHERE table1.column3 = 'randomCondition';
au lieu de
UPDATE a
FROM table1 a INNER JOIN table2 b on a.column1 = b.column1
SET a.column2 = b.column4
WHERE a.column3 = 'randomCondition';
Je suppose que ma solution est la bonne syntaxe pour MySQL.
UPDATE
"QuestionTrackings"
SET
"QuestionID" = (SELECT "QuestionID" FROM "Answers" WHERE "AnswerID"="QuestionTrackings"."AnswerID")
WHERE
"QuestionID" is NULL
AND ...
J'avais la même question. Voici une solution de travail similaire à celle de eglasius . J'utilise postgresql.
UPDATE QuestionTrackings
SET QuestionID = a.QuestionID
FROM QuestionTrackings q, QuestionAnswers a
WHERE q.QuestionID IS NULL
Il se plaint si q a été utilisé à la place du nom de la table à la ligne 1 et que rien ne devrait précéder QuestionID à la ligne 2.
select p.post_title,m.meta_value sale_price ,n.meta_value regular_price
from wp_postmeta m
inner join wp_postmeta n
on m.post_id = n.post_id
inner join wp_posts p
ON m.post_id=p.id
and m.meta_key = '_sale_price'
and n.meta_key = '_regular_price'
AND p.post_type = 'product';
update wp_postmeta m
inner join wp_postmeta n
on m.post_id = n.post_id
inner join wp_posts p
ON m.post_id=p.id
and m.meta_key = '_sale_price'
and n.meta_key = '_regular_price'
AND p.post_type = 'product'
set m.meta_value = n.meta_value;
Mettre à jour les données de la 2ème table dans la 1ère table doivent être jointes avant SET
`UPDATE `table1` INNER JOIN `table2` ON `table2`.`id`=`table1`.`id` SET `table1`.`name`=`table2`.`name`, `table1`.`template`=`table2`.`template`;
Pour Mysql Vous pouvez utiliser cette requête
UPDATE table1 a, table2 b SET SET a.coloumn = b.coloumn O a.id = b.id
ci-dessous fonctionne pour mysql
update table1 INNER JOIN table2 on table1.col1 = table2.col1
set table1.col1 = table2.col2