2016-10-28 24 views
0

私はMYSQLをかなり新しくしており、トリガに苦労しています。私はPHPmyAdminを使って、InnoDBをストレージエンジンとして使っています。2番目のテーブル(MYSQL)の更新からテーブル値を導出する方法

私のデータベースは、プロスポーツリーグを構成するためのものです。 私はチームと部門のテーブルを持っており、その部門のチームの記録から部門の記録を計算できるようにテーブルを設定したいと考えています。ここでは、チームのテーブルを作成するための私のSQLです:

CREATE TABLE `cs340_neffj`.`teams2` (`teamID` VARCHAR(3) NOT 
    NULL ,`teamName` VARCHAR(20) NOT NULL , `teamWins` INT(3) NOT NULL , 
    `teamLoss` INT(3) NOT NULL , `divID` INT(1) NOT NULL) ENGINE = InnoDB; 

そしてここでは、各部門のテーブルです:

CREATE TABLE `cs340_neffj`.`divisions2` (`divID` INT(1) NOT NULL , 
    `divName` VARCHAR(20) NOT NULL , `divLeader` VARCHAR(20) NULL , 
    `divWins` INT(3) NOT NULL , `divLoss` INT(3) NOT NULL , `leagueID` INT 
    (1) NOT NULL) ENGINE = InnoDB; 

それでは、私がやりたいことは、それぞれの時間が「teams2」内の行が更新されます特定の部門の各チームのすべての勝敗を合計し、それをdivWinsとdivLossの 'division2'の列に挿入します。 'teams2'では、divIDは 'divisions2'を参照する外部キーです。ここで私の試みはトリガーです。 『where句』に「#1054、不明な列 『divisions2.divID』

なぜデータベースがこれを見つけることができません:私は「teams2」を更新しようとすると、私はこのエラーを取得する

INSERT INTO divisions2 (divWins) 
    SELECT SUM(teamWins) 
    FROM teams2 
    WHERE teams2.divID = divisions2.divID 

divIdはの値がないため、列?これは?

+0

あなたはfrom節のdivisions2を見逃しています... – Prisoner

+0

申し訳ありません。私は非常にSQLに慣れています。あなたが何を意味するかわからない。 –

+0

ところで、私はあなたがミドルテーブルを作成するのではなく、['View'](http://www.w3schools.com/sql/sql_view.asp)を使うべきだと思います – Prisoner

答えて

0

ちょうどあなたがupdate代わりのinsert

を使用する必要がありますレコードがすでにテーブルに division2

が存在すると仮定します

UPDATE divisions2 
SET divWins = SUM(teams2.teamWins) 
FROM teams2 
INNER JOIN division2 ON teams2.divID = divisions2.divID 

updateコマンドは、私のコメントが述べたように、短い中で基準を

に一致するすべてのデータを選択している、私はこれらのデータの種類を考えて、あなたはhereを参照することができinner joindivision2テーブル 詳細を更新しますトリガーの代わりにビューを使用する必要があります。ビューのために

CREATE VIEW view_name AS 
SELECT division2.`divID`, sum(teams2.`teamWins`) as teamWins 
FROM teams2 
INNER JOIN division2 on teams2.divID = divisions2.divID 

ですから、ビューを選択するたびに、同じ時間にteamWinsを計算します。

関連する問題