0

基本的には、2013 年のカレッジ フットボール シーズンに基づいてデータベースを作成しています。1 つの 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

トリガーから 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 に答える