基本上我一直在建立一个基于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
答案 0 :(得分: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 强>