¿Cómo puedo actualizar un campo en una tabla con un campo de otra tabla? (SQL)
-
22-07-2019 - |
Pregunta
Dos tablas:
COURSE_ROSTER
- contiene
-
COURSE_ID
como clave foránea paraCOURSES
-
USER_ID
como campo que necesito insertar enCOURSES
CURSOS
- contiene
-
COURSE_ID
como clave principal -
INSTRUCTOR_ID
como campo que debe actualizarse con el campoUSER_ID
deCOURSE_ROSTER
¿Cuál sería la sintaxis sql UPDATE
? Estoy intentando esto, pero no está bien ... Me falta algo y no puedo encontrarlo en línea.
UPDATE COURSES
SET COURSES.INSTRUCTOR_ID = COURSE_ROSTER.USER_ID
WHERE COURSE_ROSTER.COURSE_ID = COURSES.COURSE_ID
Solución
No todos los proveedores de bases de datos (SQL Server, Oracle, etc.) implementan la sintaxis de actualización de la misma manera ... Puede usar una unión en SQL Server, pero a Oracle no le gustará eso. Sin embargo, creo que casi todos aceptarán una subconsulta correlacionada
Update Courses C
SET Instructor_ID =
(Select User_ID from Course_Roster
Where CourseID = C.Course_ID)
NOTA: La columna User_ID en Course_Roster probablemente se denominaría mejor como InstructorId (o Instructor_Id) para evitar confusiones
Otros consejos
Update Courses
SET Courses.Instructor_ID = Course_Roster.User_ID
from Courses Inner Join Course_Roster
On Course_Roster.CourseID = Courses.Course_ID
Esto supone que su DBMS permite combinaciones en sus consultas de actualización. SQL Server definitivamente permite esto. Si no puede hacer algo como esto, debe buscar el uso de una subconsulta.
UPDATE COURSES
SET COURSES.INSTRUCTOR_ID = COURSE_ROSTER.USER_ID
FROM COURSES
INNER JOIN COURSE_ROSTER
ON COURSE_ROSTER.COURSE_ID = COURSES.COURSE_ID
¿Por qué necesita la columna course.instructor_id si la llena con COURSE_ROSTER.user_id? ¿No es almacenamiento redundante?
UPDATE COURSES
SET INSTRUCTOR_ID = CR.USER_ID
FROM COURSES C
INNER JOIN COURSE_ROSTER CR
ON CR.COURSE_ID = C.COURSE_ID