valores - insertar varios registros en sql
¿Copia datos de una fila existente a otra fila existente en SQL? (7)
Esto funciona bien para hacer frente a registros completos.
UPDATE your_table
SET new_field = sourse_field
Tengo una tabla llena de datos de seguimiento para un curso específico, curso número 6.
Ahora agregué nuevos datos de seguimiento para el curso número 11.
Cada fila de datos es para un usuario por un curso, por lo tanto, para los usuarios asignados tanto al curso 6 como al curso 11, hay dos filas de datos.
El cliente quiere que todos los usuarios que completaron el curso número 6 en cualquier momento después del 1 de agosto de 2008 también hayan completado el curso 11. Sin embargo, no puedo convertir el 6 al 11 porque quieren preservar sus datos anteriores para el curso 6.
Entonces, para cada fila que tiene un número de curso de 6, está marcada como completa y es mayor que la fecha 1 de agosto de 2008, quiero escribir los datos de finalización en la fila que contiene el seguimiento del curso 11 para ese usuario específico.
Tendría que trasladar los datos de la fila del curso 6 a la fila del curso 11, de modo que se muevan cosas como el puntaje del usuario y la fecha de finalización publicada.
Aquí está la estructura de la tabla:
userID (int)
courseID (int)
course (bit)
bookmark (varchar(100))
course_date (datetime)
posttest (bit)
post_attempts (int)
post_score (float)
post_date (datetime)
complete (bit)
complete_date (datetime)
exempted (bit)
exempted_date (datetime)
exempted_reason (int)
emailSent (bit)
Algunos valores serán NULL e ID de usuario / ID de curso obviamente no se transferirán ya que eso ya está en el lugar correcto.
Prueba esto:
UPDATE barang
SET ID FROM(SELECT tblkatalog.tblkatalog_id FROM tblkatalog
WHERE tblkatalog.tblkatalog_nomor = barang.NO_CAT) WHERE barang.NO_CAT <>'''';
Tal vez leí el problema incorrectamente, pero creo que ya ha insertado los 11 registros del curso y simplemente necesita actualizar aquellos que cumplen con los criterios que enumeró con los datos del curso 6.
Si este es el caso, querrá usar una UPDATE
... FROM
:
UPDATE MyTable
SET
complete = 1,
complete_date = newdata.complete_date,
post_score = newdata.post_score
FROM
(
SELECT
userID,
complete_date,
post_score
FROM MyTable
WHERE
courseID = 6
AND complete = 1
AND complete_date > ''8/1/2008''
) newdata
WHERE
CourseID = 11
AND userID = newdata.userID
Consulte esta pregunta relacionada para obtener más información
Use SELECCIONAR para insertar registros
INSERT tracking (userID, courseID, course, bookmark, course_date, posttest, post_attempts, post_score, post_date, complete, complete_date, exempted, exempted_date, exempted_reason, emailSent)
SELECT userID, 11, course, bookmark, course_date, posttest, post_attempts, post_score, post_date, complete, complete_date, exempted, exempted_date, exempted_reason, emailSent
FROM tracking WHERE courseID = 6 AND course_date > ''08-01-2008''
Copie un valor de una fila a otras filas calificadas dentro de la misma tabla (o diferentes tablas):
UPDATE `your_table` t1, `your_table` t2
SET t1.your_field = t2.your_field
WHERE t1.other_field = some_condition
AND t1.another_field = another_condition
AND t2.source_id = ''explicit_value''
Comience por aliasar la tabla en 2 referencias únicas para que el servidor SQL pueda diferenciarlas
Luego, especifique los campos para copiar.
Por último, especifique las condiciones que rigen la selección de las filas
Dependiendo de las condiciones, puede copiar de una sola fila a una serie, o puede copiar una serie a una serie. También puede especificar tablas diferentes, e incluso puede usar sub selecciones o uniones para permitir el uso de otras tablas para controlar las relaciones.
UPDATE MyTable
SET
complete = 1,
complete_date = newdata.complete_date,
post_score = newdata.post_score
FROM
(
SELECT
userID,
complete_date,
post_score
FROM MyTable
WHERE
courseID = 6
AND complete = 1
AND complete_date > ''8/1/2008''
)
UPDATE c11
SET
c11.completed= c6.completed,
c11.complete_date = c6.complete_date,
-- rest of columns to be copied
FROM courses c11 inner join courses c6 on
c11.userID = c6.userID
and c11.courseID = 11 and c6.courseID = 6
-- and any other checks
Siempre he visto la cláusula From de una actualización, como una de una selección normal. En realidad, si desea verificar qué se actualizará antes de ejecutar la actualización, puede reemplazar las partes de actualización con una selección de c11. *. Vea mis comentarios sobre la respuesta del pato cojo.