¿Cómo puedo actualizar un campo en una tabla con un campo de otra tabla? (SQL)

StackOverflow https://stackoverflow.com/questions/440702

  •  22-07-2019
  •  | 
  •  

Pregunta

Dos tablas:

COURSE_ROSTER - contiene

  • COURSE_ID como clave foránea para COURSES
  • USER_ID como campo que necesito insertar en COURSES

CURSOS - contiene

  • COURSE_ID como clave principal
  • INSTRUCTOR_ID como campo que debe actualizarse con el campo USER_ID de COURSE_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
¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top