简体   繁体   中英

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or

I am trying to update city table as City + #p + 'Number of players of Team'+ #g + 'Number of Goals' but there is a solution including IN and EXISTS operators which do not solve my problem.

UPDATE Team set City = City +'#p'+ CONVERT(nvarchar(10),(select COUNT(p1.PlayerID) 
                                            from  Team as t     
                                            inner join PlayerTeam as pt on pt.TeamID= t.TeamID
                                            inner join Player as p1 on p1.PlayerID= pt.PlayerID
                                            where pt.Season = '13-14' 
                                            group by t.Name) )

                                            + '#g' +

                                            CONVERT(nvarchar(10),(select Count(g.PlayerID) 
                                            from  Team as t 
                                            inner join PlayerTeam as pt on pt.TeamID = t.TeamID
                                            inner join Player as p1 on p1.PlayerID= pt.PlayerID
                                            inner join Goals as g on g.PlayerID = p1.PlayerID
                                            where pt.Season = '13-14'
                                            group by t.Name))

Assuming you are using SQL Server I think the following would work:

UPDATE Team
SET City = t.City + city.City
FROM Team as T
    INNER JOIN
    (
        SELECT t.TeamId, '#p' + CONVERT(nvarchar(10), COUNT(p1.PlayerId)) + '#g' + CONVERT(nvarchar(10), pg.Goals) AS City
        FROM Team as t
            INNER JOIN 
                PlayerTeam as pt on pt.TeamID= t.TeamID
            INNER JOIN 
                Player as p1 on p1.PlayerID = pt.PlayerID
            INNER JOIN 
            (
                SELECT g.PlayerID, COUNT(g.PlayerID) AS Goals 
                FROM  Team as t 
                INNER JOIN 
                    PlayerTeam as pt on pt.TeamID = t.TeamID
                INNER JOIN 
                    Player as p1 on p1.PlayerID= pt.PlayerID
                INNER JOIN 
                    Goals as g on g.PlayerID = p1.PlayerID
                WHERE pt.Season = '13-14'
                GROUP BY g.PlayerID, t.Name
            ) pg
            ON p1.PlayerID = pg.PlayerID
        WHERE pt.Season = '13-14'
        GROUP BY t.TeamId, p1.PlayerId, t.Name, pg.Goals
    ) city
    ON t.TeamID = city.TeamID

Your subqueries are trying to use a result set that includes every teams counts for each row of the update, which is meaningless, hence the error. You need use the ID of the row being updated.

UPDATE Team
SET City = T.City + '#p' + CONVERT(nvarchar(10), COUNT(DISTINCT pt.PlayerId)) + '#g' + CONVERT(nvarchar(10), COUNT(pt.PlayerId))
FROM Team as T
INNER JOIN PlayerTeam as PT ON PT.TeamID = T.TeamID AND PT.Season = '13-14' 
INNER JOIN Goals as G ON G.PlayerId = PT.PlayerId

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM