Espero que tenga sentido, déjame explicarlo:
Hay una tabla de datos de seguimiento para un programa de prueba donde cada fila tiene ..
QuestionID y AnswerID (hay una tabla para cada uno). Entonces, debido a un error, hubo un montón de QuestionID configurados en NULL, pero el QuestionID de un AnswerID relacionado está en la tabla de Respuestas.
Entonces, digamos que QuestionID es NULL y AnswerID es 500, si vamos a la tabla de Respuestas y encontramos AnswerID 500, hay una columna con QuestionID que debería haber estado donde está el valor NULL.
Básicamente, quiero configurar cada ID de pregunta NULL para que sea igual al ID de pregunta que se encuentra en la tabla Respuestas en la fila Respuesta del ID de respuesta que se encuentra en la tabla de seguimiento (la misma fila que el ID de pregunta NULO que se está escribiendo).
¿Cómo haría esto?
UPDATE QuestionTrackings
SET QuestionID = (need some select query that will get the QuestionID from the AnswerID in this row)
WHERE QuestionID is NULL AND ... ?
No estoy seguro de cómo podré hacer que asigne el QuestionID al QuestionID del AnswerID correspondiente ...
Respuestas:
Recomiendo verificar cuál es el conjunto de resultados para actualizar antes de ejecutar la actualización (la misma consulta, solo con una selección):
En particular, si cada ID de respuesta tiene definitivamente solo 1 ID de pregunta asociada.
fuente
update QuestionTrackings q inner join QuestionAnswers a on q.AnswerID = a.AnswerID set q.QuestionID = a.QuestionID;
parece ser la misma consulta básica en un orden diferente. alguna idea de por qué?UPDATE table1 NATURAL JOIN table2 SET table1.col1 = table1.col2 WHERE table2.col3 ="condition"
Sin la notación de actualización y unión (no todos los DBMS lo admiten), use:
A menudo, en una consulta como esta, necesita calificar la cláusula WHERE con una cláusula EXISTS que contiene la subconsulta. Esto evita que la ACTUALIZACIÓN pisotee las filas donde no hay coincidencia (por lo general, anula todos los valores). En este caso, dado que una ID de pregunta faltante cambiaría NULL a NULL, podría decirse que no importa.
fuente
No sé si se ha encontrado con el mismo problema que yo en MySQL Workbench, pero ejecutar la consulta con el
INNER JOIN
después de laFROM
declaración no funcionó para mí. No pude ejecutar la consulta porque el programa se quejó de laFROM
declaración.Entonces, para que la consulta funcione, la cambié a
en vez de
Supongo que mi solución es la sintaxis correcta para MySQL.
fuente
fuente
Tenía la misma pregunta. Aquí hay una solución de trabajo que es similar a la de eglasius. Estoy usando postgresql.
Se queja si se usó q en lugar del nombre de la tabla en la línea 1, y nada debe preceder a QuestionID en la línea 2.
fuente
fuente
Para Mysql puede utilizar esta consulta
ACTUALIZAR table1 a, table2 b SET a.coloumn = b.coloumn DONDE a.id = b.id
fuente
Actualizar los datos de la segunda tabla en la primera tabla debe unirse internamente antes de SET:
fuente
a continuación funciona para mysql
fuente
Creo que esto debería funcionar.
fuente