2016-11-30 9 views
0

私はメジャーリーグのような構造のSQLデータベースを持っています。それにはアメリカリーグとナショナルリーグがあり、チームには勝敗記録があり、選手を含むチームが含まれている。SQL:ネクタイを破る

マイリーグテーブルには、| league_name | league_id(プライマリキー)|ワイルドカード|

ワイルドカードは、その部門をリードしていない部門の中で最善のチームである外部キーのteamIDです。ここで

(勝利/損失記録が保管されている場合)、私は私のZ_TEAMSテーブルを更新するときにワイルドカードを更新するために、私のトリガーです:

UPDATE Z_LEAGUES 
SET `Z_LEAGUES`.`Wild Card` = (SELECT teamID 
          FROM Z_TEAMS 
          WHERE (teamWins/teamLoss) = 
          (SELECT MAX(teamWins/teamLoss) FROM Z_TEAMS, 
          Z_DIVISIONS WHERE Z_TEAMS.divID = 
          Z_DIVISIONS.divID AND Z_DIVISIONS.leagueID = 
          Z_LEAGUES.leagueID AND Z_TEAMS.teamID != Z_DIVISIONS.divLeader)) 

それは通常Z_TEAMSが更新されるたびにうまく機能し、正しいチームを選びます。ただし、Z_TEAMSを更新して2つのチームが同じレコードを持ち、両方がワイルドカードの候補になるようにしようとすると、トリガーは複数の行を返し、更新を制限します。

私の質問は:どのように私はこのネクタイを壊すことができますか?私は、ワイルドカードの場所に両方のチームを表示するか、任意にピッキングするか、アルファベット順にピッキングするのにはオープンです。私はかなり新しいSQLですし、これを理解することはできません。

+0

これはMySQLの質問ではありません。どのようなアルゴリズムを開発すべきかということです。あなたまたはあなたのユーザーが合理的であると考えるタイ・ブレーカーを開発することができます。結ばれた2つのチームを見て、どちらが最善の記録を取っているかを判断することができます。もしそれがネクタイであれば、ほとんどのチームがシーズン中に走ります。そして、これは続けることができます。米国憲法を見て、選挙大学の関係をどのように扱うかを見てください。ある種のタイ・ブレーカー・アルゴリズムが必要です。それはあなた次第です。 – mba12

答えて

0
UPDATE Z_LEAGUES 
SET `Z_LEAGUES`.`Wild Card` = 
(SELECT teamID 
FROM Z_TEAMS 
WHERE (teamWins/teamLoss) = 
    (SELECT MAX(teamWins/teamLoss) 
    FROM Z_TEAMS, Z_DIVISIONS 
    WHERE Z_TEAMS.divID = Z_DIVISIONS.divID 
     AND Z_DIVISIONS.leagueID = Z_LEAGUES.leagueID 
     AND Z_TEAMS.teamID != Z_DIVISIONS.divLeader) 
ORDER BY teamID 
Limit 1) 

ベースクエリに最後の2行を追加しました。

制限は出力行を制限し、順序はどの行が選択されるかを正確にするために順序を決めます。

order by teamID descを使用して並べ替えを並べ替えることができます。

+0

素晴らしい、ありがとう!回答があれば –

+0

解決策を受け入れる – rshetye

関連する問題