【问题标题】:Joining 2 table using 1 JOIN and another LEFT JOIN使用 1 个 JOIN 和另一个 LEFT JOIN 连接 2 个表
【发布时间】:2016-09-15 17:42:46
【问题描述】:

我目前正在使用 MySQL,我需要从 3 个表中进行选择。我有 3 张桌子:Game、Game_genre 和 cmets。

游戏桌 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 的错误

【问题讨论】:

    标签: mysql join left-join


    【解决方案1】:

    当您使用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 教科书或教程以了解基本语法。

    【讨论】:

      【解决方案2】:

      正确的语法是:

      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 上有它。

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

      【讨论】:

      • 代码正在运行,但结果缺少 Comments 表的内容
      • @HuiZhen . . .也许join 键不正确。没有表格布局和样本数据,我们只能在问题中查询中的信息。
      【解决方案3】:

      尝试如下:

      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 :)

      【讨论】:

      • 我已经尝试过了,但它只返回来自 Game 和 Game_genre 的数据,而不是 cmets 表
      • 尝试使用“LEFT OUTER JOIN”代替,如果可能显示cmets表的数据截图
      • @Jagannath:它与 LEFT JOIN 完全相同。 OUTER 是一个多余的关键字。
      • 评论中暂时没有记录。选择时结果应返回 NULL
      猜你喜欢
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多