Mysql 为什么我在字段列表中得到错误不明确字段或未知列?

Mysql 为什么我在字段列表中得到错误不明确字段或未知列?,mysql,sql,Mysql,Sql,我创建了这两个表: 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

我创建了这两个表:

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;
我的查询需要根据
GameScoreToal.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;
两个表中都有合法记录。

Query 1 在第一个查询中,问题是GameName字段同时存在于Game表和GameScoreTotal表中。因此,字段列表中的错误列“GameName”不明确

问题2 MySQL没有
完全连接
。关于MySQL连接语法

尝试Game和GameScoreTotal表之间的左外部联接,此联接将获取Game表中的所有记录以及GameScoreTotal表中的所有匹配记录,如果GameScoreTotal表中没有匹配记录,将显示NULL

您还可以尝试
内部联接
,这将仅获取两个表之间的匹配记录

脚本:


所以您有一个
id
列,用于
gamescoretall
,而不是
Game
?虽然我重新命名的名称是唯一的(大部分是…),但最好也在那里使用一个id(并且您可能可以放弃
scoreId
,只使用
gameId
,除非有其他要求)。考虑在它代表的单位数(分钟?)中标记<代码> TimeTimeTo/<代码>,不要格式化它。code>OverallScoreTotal是一个派生值,并且(通常)不应该存储—它应该动态计算。考虑创建<代码>类型>代码>表,以及<代码> GAMEGENRE 交叉表,允许游戏成为多种类型的一部分。此外,为什么尝试使用“外部”连接?我想你只关心前十名的比赛,他们都存在,并且都有得分。与之相反的是,可能不存在或可能没有分数的游戏。在这个项目中,游戏名称将是不同的。总时间以分钟为单位,但这将在界面中说明。当有人在另一个评分表中输入数据时,这些值将被放入总分,然后除以各个评分的数量。为了这个项目的目的,我只指定了一种类型来消除这一部分的复杂性。我只想从游戏表中获取所有信息,但按GameScoreToal字段排序,只按较高的10个数字排序。谢谢你的帮助!!!但是我不认为我们已经解决了这个问题。是的,我正在使用完全连接,这样两个表必须有相同的游戏名才能产生结果。
SELECT Game.GameName 
FROM Game 
LEFT OUTER JOIN GameScoreTotal 
    ON Game.GameName=GameScoreTotal.GameName 
ORDER BY OverallScoreTotal DESC 
LIMIT 0, 10;