如何使用另一个表中的字段更新一个表中的字段? (SQL)

时间:2009-01-13 20:40:49

标签: sql sql-update

两张桌子:

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

5 个答案:

答案 0 :(得分:5)

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

这假设您的DBMS允许更新查询的连接。 SQL Server绝对允许这样做。如果你不能做这样的事情,你需要考虑使用子查询。

答案 1 :(得分:4)

并非所有数据库供应商(SQL Server,Oracle等)都以相同的方式实现更新语法...您可以在SQL Server中使用连接,但Oracle不会喜欢这样。我相信几乎所有人都会接受一个相关的子查询

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

注意:Course_Roster中的User_ID列可能更好地命名为InstructorId(或Instructor_Id)以避免混淆

答案 2 :(得分:2)

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

答案 3 :(得分:2)

如果用COURSE_ROSTER.user_id填充它,为什么需要列course.instructor_id?它不是冗余存储吗?

答案 4 :(得分:1)

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