tabla - ¿Duplicar una fila en SQL?
no repetir registros en consulta sql (3)
OK, tengo una tabla que tiene dos columnas, ID de usuario y ID de curso. Se utiliza para asignar cursos de formación a un usuario. Se parece a esto:
userid courseid
0 1
0 3
0 6
1 1
1 4
1 5
por lo que el usuario 0 se asigna a los cursos 1,3,6 y el usuario 1 se asigna a 1, 4 5
De todos modos, debo tomar a cada usuario asignado a 6 y crear una nueva fila que tenga ese ID de usuario y courseid 11, básicamente asignando a cada usuario que actualmente está asignado a 6 para que también se asigne a 11
por alguna razón (no creé esta base de datos), ambas filas están marcadas como claves principales, y algunas declaraciones que he intentado han generado un error debido a esto, ¿qué diablos es el trato?
Oh, tal vez sea porque hay algunos usuarios que ya están asignados a 11, por lo que se está atragantando.
por favor ayuda
Esto debería ayudar:
INSERT
INTO [table]
(
userid,
courseid
)
SELECT userid,
11
FROM [table]
WHERE courseid = 6
AND userid NOT IN
(SELECT userid
FROM [table]
WHERE courseid = 11
);
Esto seleccionará a todos los usuarios en el curso 6 no en el curso 11 y los agregará con el curso 11 a la tabla.
Insert Into TableName (userID, courseID)
Select userID, 11 From TableName Where courseID=6;
Además, estoy un poco confundido por tu comentario de que ambas son claves primarias. Ambas filas pueden ser parte de la clave principal o ambas pueden ser claves únicas, pero ambas no pueden ser una clave principal. En cuanto a los errores, probablemente se deba a que la consulta intentó insertar filas que eran duplicados de filas ya existentes. Para eliminar esta posibilidad puedes hacer esto:
Insert Into TableName (userID, courseID)
Select userID, 11 From TableName Where courseID=6
AND (userID not in (Select userID From TableName Where courseID=11))
Dependiendo de su base de datos, esto podría funcionar también:
INSERT OR IGNORE INTO TableName (userID, courseID)
SELECT userID, 11 FROM TableName WHERE courseID=6;
De todos modos, ahí tienes.
insert into TableName (userId, courseId)
select userId, 11
from TableName
where courseId = 6
and not exists (
select 1
from TableName nested
where nested.userId = TableName.UserId
and nested.courseId = 11
)
Selecciona todos los usuarios que están asignados a courseId 6 pero aún no están asignados a courseId 11 e inserta un nuevo registro en la tabla para ellos para courseId 11.