0

次の 2 つのテーブルを作成しました。

CREATE TABLE `Game` (

 `GameName` varchar(30) NOT NULL,
 `GameGenre` varchar(20) NOT NULL,
 `GameDescription` varchar(500) NOT NULL,
 `GameMode` varchar(20) NOT NULL,
 PRIMARY KEY (`GameName`)
) ENGINE=InnoDB;

CREATE TABLE `GameScoreTotal` (

 `ScoreID` int(3) NOT NULL AUTO_INCREMENT,
 `GameName` varchar(30) NOT NULL,
 `OverallScoreTotal` mediumint(9) NOT NULL,
 `GraphicsTotal` mediumint(9) NOT NULL,
 `StoryTotal` mediumint(9) NOT NULL,
 `GameplayTotal` mediumint(9) NOT NULL,
 `TimeTotal` mediumint(9) NOT NULL,
 PRIMARY KEY (`ScoreID`),
  CONSTRAINT  FOREIGN KEY (`GameName`) REFERENCES `Game` (`GameName`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;

私のクエリは、に基づいて上位 10 試合のゲーム テーブルからすべての情報を返す必要がありますGameScoreTotal.OverallScoreTotal

私が試したクエリ:

SELECT GameName 
FROM Game 
FULL JOIN GameScoreTotal 
    ON Game.GameName=GameScoreTotal.GameName 
ORDER BY OverallScoreTotal DESC 
LIMIT 0, 10;

SELECT Game.GameName 
FROM Game 
FULL JOIN GameScoreTotal 
    ON Game.GameName=GameScoreTotal.GameName 
ORDER BY OverallScoreTotal DESC 
LIMIT 0, 10;

どちらのテーブルにも正当なレコードが含まれています。

4

1 に答える 1

1

クエリ 1

最初のクエリの問題は、フィールド GameName がテーブル Game と GameScoreTotal の両方に存在することです。したがって、エラーColumn 'GameName' in field list is ambiguous

クエリ 2

MySQL にはFULL JOIN. MySQL JOIN 構文については、こちらをお読みください。

GameGameScoreTotalLEFT OUTER JOINテーブルの間を試してみてください。この結合は、Game テーブルからすべてのレコードを取得し、GameScoreTotal テーブルから一致するすべてのレコードを取得します。GameScoreTotalテーブルに一致するレコードがない場合は、NULL が表示されます。

を試すこともできますINNER JOIN。これは、2 つのテーブル間で一致するレコードのみをフェッチします。

スクリプト:

SELECT Game.GameName 
FROM Game 
LEFT OUTER JOIN GameScoreTotal 
    ON Game.GameName=GameScoreTotal.GameName 
ORDER BY OverallScoreTotal DESC 
LIMIT 0, 10;
于 2012-05-04T22:48:06.143 に答える