Espero que tenha feito sentido, deixe-me explicar:
Há uma tabela de dados de rastreamento para um programa de teste em que cada linha tem ..
QuestionID e AnswerID (há uma tabela para cada um). Portanto, por causa de um bug, havia vários QuestionIDs definidos como NULL, mas o QuestionID de um AnswerID relacionado está na tabela de Respostas.
Então, digamos que QuestionID seja NULL e AnswerID seja 500, se formos para a tabela de Respostas e encontrarmos AnswerID 500, haverá uma coluna com QuestionID que deveria estar onde o valor NULL está.
Então, basicamente, eu quero definir cada QuestionID NULL para ser igual ao QuestionID encontrado na tabela Answers na linha Answer do AnswerID que está na tabela de rastreamentos (mesma linha que o QuestionID NULL que está sendo escrito).
Como eu faria isso?
UPDATE QuestionTrackings
SET QuestionID = (need some select query that will get the QuestionID from the AnswerID in this row)
WHERE QuestionID is NULL AND ... ?
Não tenho certeza de como serei capaz de atribuir o QuestionID ao QuestionID do AnswerID correspondente ...
Respostas:
Eu recomendo verificar qual é o conjunto de resultados a ser atualizado antes de executar a atualização (mesma consulta, apenas com uma seleção):
Particularmente se cada id de resposta tem definitivamente apenas 1 id de pergunta associado.
fonte
update QuestionTrackings q inner join QuestionAnswers a on q.AnswerID = a.AnswerID set q.QuestionID = a.QuestionID;
parece ser a mesma consulta básica em uma ordem diferente. alguma ideia do porquê?UPDATE table1 NATURAL JOIN table2 SET table1.col1 = table1.col2 WHERE table2.col3 ="condition"
Sem a notação update-and-join (nem todos os DBMS suportam isso), use:
Freqüentemente, em uma consulta como esta, você precisa qualificar a cláusula WHERE com uma cláusula EXISTS que contém a subconsulta. Isso evita que o UPDATE atropele as linhas onde não há correspondência (geralmente anulando todos os valores). Nesse caso, como um ID de pergunta ausente mudaria o NULL para NULL, isso não importa.
fonte
Não sei se você encontrou o mesmo problema que eu no MySQL Workbench, mas executar a consulta com o
INNER JOIN
depois daFROM
instrução não funcionou para mim. Não consegui executar a consulta porque o programa reclamou doFROM
declaração.Então, para fazer a consulta funcionar, mudei para
ao invés de
Acho que minha solução é a sintaxe certa para MySQL.
fonte
fonte
Eu estava tendo a mesma pergunta. Aqui está uma solução de trabalho semelhante à de eglasius. Estou usando o postgresql.
Ele reclama se q foi usado no lugar do nome da tabela na linha 1 e nada deve preceder QuestionID na linha 2.
fonte
fonte
Para Mysql, você pode usar esta consulta
ATUALIZAR tabela1 a, tabela2 b SET a.coloumn = b.coloumn ONDE a.id = b.id
fonte
A atualização dos dados da 2ª tabela na 1ª tabela precisa do Inner join antes de SET:
fonte
abaixo funciona para mysql
fonte
Eu acho que isso deve funcionar.
fonte