来自另一个表

时间:2017-02-28 10:41:46

标签: sql sql-server

我尝试根据CurrentLevelFSB_ProcessStudents表格更新StudentsStudentId上的UPDATE FSB_ProcessStudents SET Currentlevel = (SELECT s.LevelId From FSB_Students s INNER JOIN FSB_ProcessStudents ps ON ps.StudentId = s.StudentId) 这是我的陈述

No EMPLOYEE records for DEPTNO = [40]

在执行时它给了我错误:

  

子查询返回的值超过1。

我哪里出错?

5 个答案:

答案 0 :(得分:5)

Sql server支持在update语句中使用连接,因此您可以像这样编写更新语句:

UPDATE ps
SET Currentlevel = s.LevelId
FROM FSB_Students s
INNER JOIN FSB_ProcessStudents ps
     ON ps.StudentId = s.StudentId

答案 1 :(得分:1)

尝试以下查询

UPDATE  ps
SET     ps.Currentlevel = s.LevelId
FROM    FSB_ProcessStudents ps
    INNER JOIN FSB_Students s   on s.StudentId = ps.StudentId

答案 2 :(得分:1)

使用以下查询进行更新:

UPDATE FSB_ProcessStudents SET Currentlevel = LevelId
FROM FSB_Students S
WHERE FSB_ProcessStudents.StudentId = s.StudentId

答案 3 :(得分:0)

您遇到此问题是因为您的子查询返回多个值,并且无法通过单个update语句更新多个值。

所以使用如下所示的顶级关键字,它将被解析

UPDATE FSB_ProcessStudents SET Currentlevel = 
(SELECT top 1
    s.LevelId
    From FSB_Students s
    INNER JOIN FSB_ProcessStudents ps
         ON ps.StudentId = s.StudentId order by ps.StudentId desc)

答案 4 :(得分:0)

错误不言自明。您的子查询应该只返回一个值。

试试这个:

UPDATE FSB_ProcessStudents SET Currentlevel = 
(SELECT TOP 1
    s.LevelId
    From FSB_Students s
    INNER JOIN FSB_ProcessStudents ps
         ON ps.StudentId = s.StudentId)

或者,请确保添加其他条件以返回一个或不返回值。