使用1 JOIN和另一个LEFT JOIN连接2表

时间:2016-05-19 02:49:04

标签: mysql join left-join

我目前正在使用MySQL,我需要从3个表中进行选择。我有3个表:Game,Game_genre和评论。

游戏桌 where GameID is the PK

Game_genre表 where GameID and GenreID is the PK

我试过的是

SELECT G.GameTitle, G.Company, G.ReleaseDate, G.Description, G.Price, GG.GenreName, G.Preowned, G.ImagePath, round((G.Price*0.8),2)'SalesPrice'
from game G, game_genre GG, comments C
LEFT JOIN C ON G.GameID
LEFT JOIN GG on G.GameID
WHERE G.GameID = GG.GameID;

然而,即使我给每个表一个别名

,这也会出现错误1066

3 个答案:

答案 0 :(得分:0)

当您使用JOIN条款时,不要列出FROM子句中的所有表格,只有第一个表格会在那里。表之间的关系在ON子句中,而不是WHERE子句。

SELECT G.GameTitle, G.Company, G.ReleaseDate, G.Description, G.Price, GG.GenreName, G.Preowned, G.ImagePath, round((G.Price*0.8),2)'SalesPrice'
FROM game G
LEFT JOIN C ON G.GameID = C.GameID
LEFT JOIN GG ON G.GameID = GG.GameID;

请查看您的SQL教科书或教程以了解基本语法。

答案 1 :(得分:0)

正确的语法是:

SELECT G.GameTitle, G.Company, G.ReleaseDate, G.Description, G.Price,
       GG.GenreName, G.Preowned, G.ImagePath,
       round((G.Price*0.8),2) as SalesPrice
FROM game G LEFT JOIN
     comments C
     ON G.GameID = C.GameId LEFT JOIN
     game_genre GG 
     on G.GameId = GG.GameId;

我猜测Game_Genre上的联接与GenreId类似;但是,您的代码在GameId上有。

另外,不要使用单引号作为列别名。仅对字符串和日期常量使用单引号。

答案 2 :(得分:0)

试试如下:

SELECT G.GameTitle, G.Company, G.ReleaseDate, G.Description, G.Price, GG.GenreName, G.Preowned, G.ImagePath, round((G.Price*0.8),2)'SalesPrice' from game G LEFT JOIN game_genre GG ON G.GameID = GG.GameID LEFT JOIN comments C ON G.GameID = C.GameID WHERE <your condition>

我建议你学习更多关于SQL语法的JOINS:)