0

基本上我一直在制作一个基于 2013 年大学橄榄球赛季的数据库。我希望能够通过运行一个 SQL 脚本来更新所有团队记录。

SET @thisTeam='Oregon';
UPDATE team
SET wins=(
        SELECT COUNT(winner) FROM game WHERE winner=@thisTeam),
    losses=(
        SELECT COUNT(loser) FROM game WHERE loser=@thisTeam)
WHERE teamName=@thisTeam;

到目前为止,我一直在手动更新我的 @thisTeam 变量来更新游戏。我尝试使用触发器,但据我了解,我无法在“游戏”表中使用触发器来执行“团队”表中的更新。这段代码工作得很好,我只是想要一种更自动化的方式来做到这一点。我是 SQL 新手,我通常会运行 FOR EACH 循环,但我听说用 SQL 来做这件事是一个非常糟糕的主意。

我正在运行 Microsoft SQL Server

4

1 回答 1

2

您可以从触发器更新第二个表。您还可以一次性更新表格:

with x as (
    select
        t.teamName,
        sum(case winner when t.teamname then 1 else 0 end) wins,
        sum(case loser when t.teamname then 1 else 0 end) losses
    from
        team t
            cross join
        game g
    group by
        t.teamName 
)
Update
    t
Set
    wins = x.wins,
    losses = x.losses
From
    team t
        inner join 
    x
        on t.teamName = x.teamName

编辑 - 稍微简化

Example SQLFiddle

于 2013-11-09T01:25:04.760 回答