使用SELECT TOP时,子查询返回了多个值错误

时间:2016-06-20 10:08:32

标签: sql sql-server

我在执行下面的代码时收到以下错误,并且不确定我为什么会得到它,因为我正在使用SELECT TOP。我执行查询时看不到任何输出但有人能看出它有什么问题吗?

  

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

;WITH cte AS
(
    SELECT f.FixtureID,
        ht.FinalTeamWeight - at.FinalTeamWeight AS TeamScore
    FROM dbo.Fixture f

...

)


UPDATE f 
SET f.HomeScore = s.HomeScore,
    f.AwayScore = s.AwayScore
FROM dbo.Fixture f
INNER JOIN 
(
    SELECT FixtureID,
    TeamScore,
    (
        SELECT
        CASE 
            WHEN c.TeamScore BETWEEN HomeWeighting AND AwayWeighting AND HomeScore > AwayScore AND s.ScoreDifference = sr.ScoreDifference
                THEN (SELECT TOP 1 ScoreID FROM dbo.Score WHERE HomeScore > AwayScore AND ScoreDifference = 1 ORDER BY NEWID())     
        END AS ScoreID
        FROM dbo.Score s
        LEFT JOIN ScoreReference sr
        ON s.ScoreDifference = sr.ScoreDifference

    ) AS ScoreID -- end select case

FROM cte c

 ) -- end inner join

 AS ScoreResult
    ON f.FixtureID = ScoreResult.FixtureID
INNER JOIN Score s
    ON ScoreResult.ScoreID = s.ScoreID
INNER JOIN ScoreReference sr
    ON s.ScoreDifference = sr.ScoreDifference

表: SCORE_REFERENCE

enter image description here

SCORE:

enter image description here

2 个答案:

答案 0 :(得分:1)

在这里添加TOP(1)......

SELECT TOP(1)
        CASE 
            WHEN c.TeamScore BETWEEN HomeWeighting AND AwayWeighting AND HomeScore > AwayScore AND s.ScoreDifference = sr.ScoreDifference
                THEN (SELECT TOP 1 ScoreID FROM dbo.Score WHERE HomeScore > AwayScore AND ScoreDifference = 1 ORDER BY NEWID())     
        END AS ScoreID
        FROM dbo.Score s
        LEFT JOIN ScoreReference sr
        ON s.ScoreDifference = sr.ScoreDifference

答案 1 :(得分:0)

它可能不是TOP的onw,而是包含它的那个。在那个上添加TOP 1