Как я могу обновить поле в одной таблице полем из другой таблицы?(SQL)

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

  •  22-07-2019
  •  | 
  •  

Вопрос

Две таблицы:

COURSE_ROSTER - содержит

  • COURSE_ID в качестве внешнего ключа к COURSES
  • USER_ID как поле, которое мне нужно вставить в COURSES

COURSES - содержит

  • COURSE_ID в качестве первичного ключа
  • INSTRUCTOR_ID как поле, которое необходимо обновить с помощью USER_ID поле из COURSE_ROSTER

Что бы этот UPDATE синтаксис sql будет?Я пытаюсь это сделать, но безрезультатно...Мне чего-то не хватает, и я не могу найти это в Интернете.

UPDATE COURSES 
SET COURSES.INSTRUCTOR_ID = COURSE_ROSTER.USER_ID 
WHERE COURSE_ROSTER.COURSE_ID = COURSES.COURSE_ID
Это было полезно?

Решение

Не все поставщики баз данных (SQL Server, Oracle и т.д.) Реализуют синтаксис обновления одинаковым образом...Вы можете использовать join в SQL Server, но Oracle это не понравится.Однако я полагаю, что почти все примут исправленный подзапрос

  Update Courses C  
   SET Instructor_ID = 
          (Select User_ID from Course_Roster
           Where CourseID = C.Course_ID)

ПРИМЕЧАНИЕ:Столбец User_ID в Course_Roster, вероятно, было бы лучше назвать InstructorId (или Instructor_Id), чтобы избежать путаницы

Другие советы

    Update Courses
    SET Courses.Instructor_ID = Course_Roster.User_ID
    from Courses Inner Join Course_Roster 
    On Course_Roster.CourseID = Courses.Course_ID

Это предполагает, что ваша СУБД допускает объединения в ваших запросах на обновление.SQL Server определенно позволяет это.Если вы не можете сделать что-то подобное, вам нужно подумать об использовании подзапроса.

UPDATE COURSES 
SET COURSES.INSTRUCTOR_ID = COURSE_ROSTER.USER_ID 
FROM COURSES
INNER JOIN COURSE_ROSTER
    ON COURSE_ROSTER.COURSE_ID = COURSES.COURSE_ID

Зачем вам нужен столбец course.instructor_id, если вы заполняете его COURSE_ROSTER.user_id?Разве это не избыточное хранилище?

UPDATE COURSES 
SET INSTRUCTOR_ID = CR.USER_ID 
FROM COURSES C
INNER JOIN COURSE_ROSTER CR   
   ON CR.COURSE_ID = C.COURSE_ID
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top