【问题标题】:I'm trying to join 4 tables and 3 have their own index table shared with the first我正在尝试加入 4 个表和 3 个与第一个共享的索引表
【发布时间】:2015-04-28 05:50:26
【问题描述】:

这是这里的总体结构:总共有 7 个表。 游戏桌(主桌) 透视表 流派表 操作系统表

Persepective、genre 和 os 都有自己独立的索引表,将它们连接到游戏表。

我认为使用JOIN 和UNION 将允许我构造包含每个表的列的结果。 Game 表大约有四列,其他三个非索引表只有我需要的一列。

这是我正在使用的命令,但它只附加流派表中的流派列。它不会附加其他两个列中的其他列。

MySQL> (选择 game.game_name、game.release_date、game.current_development、game.designer、genre.genre 从 gamegen 加入游戏 gamegen.game_id = game.game_id 在 gamegen.genre_id =genre.genre_id WHERE game.game_id = 32) 联合所有 (选择 game.game_name,game.release_date,game.current_development,game.designer,perspective.perspective_type FROM 玩家加入游戏在 gameper.game_id = game.game_id 加入视角在 gameper.perspective_id = perspective.perspective_id WHERE game.game_id = 32) 联合所有 (选择 game.game_name、game.release_date、game.current_development、game.designer、operating_environment.system_name FROM gameoe 在 gameoe.game_id = game.game_id 加入 operation_environment on gameoe.oe_id = operating_environment.oe_id WHERE game.game_id = 32) ;

当我这样做时,我得到的只是游戏表列和流派表中的流派列,但透视表中的 perspective_type 列不会显示,而 system_type 列来自流派表operational_environment 表不会显示。

我错过了什么?

【问题讨论】:

  • 最好在sqlfiddle.com上解决诸如此类的问题。
  • 感谢 ArK,将代码放在那个特殊的窗口中。我不知道该怎么做。
  • 现在我想出了如何编辑它,我必须点击“改进编辑”,但现在我无法像以前那样让代码显示出来。
  • 感谢 tanaydin,但它不起作用。一直告诉我我无权使用我试图创建的数据库。

标签: mysql join union


【解决方案1】:

您需要将这些列添加到 SELECT 子句中才能在查询输出中列出。

【讨论】:

  • 什么意思?我对每个表都有一个单独的 SELECT JOIN 语句。你的意思是把它们都放在每个 select 语句中吗,因为我也试过了,但是它给了我一个错误,因为连接部分只提到了我用那个 select 语句添加的特定表。
【解决方案2】:

您所有的SELECT 都基于相同的条件(WHERE game.game_id = 32)并从game 表中检索相同的列,仅通过连接其他 3 个表(genre、perspective 和operational_environment)。

那么你可能只需要使用这样的东西吗?

SELECT game.*, genre.*, perspective.*, operational_environment.*
FROM game
JOIN gamegen ON gamegen.game_id = game.game_id
JOIN genre ON gamegen.genre_id = genre.genre_id
JOIN gameper ON gameper.game_id = game.game_id
JOIN perspective ON gameper.perspective_id = perspective.perspective_id
JOIN gameoe ON gameoe.game_id = game.game_id
JOIN operational_environment ON gameoe.oe_id = operational_environment.oe_id
WHERE game.game_id = 32;

【讨论】:

  • 也许吧,但我必须对此进行测试并确保它始终正确,因为我不明白它在做什么。它如何知道每个表都引用完全相同的行。谢谢你。我会测试它。
  • 一开始,它看起来像是在工作,但它重复了操作 environment.system_name 列两次。它遍历每个系统名称,然后再次执行。
  • 我使用通用列选择 (foo.*) 为您提供了总体思路。您可以通过在 SELECT 单词之后明确指定它们来获得所需的列。如果您得到多行,您可能需要通过在WHERE 中添加更多条件来优化您的选择。
  • 好的,谢谢。发生的情况是任何其他列的任何其他条目,操作系统列重复整个操作系统列表。如果有 2 个流派,它将重复操作系统列表两次。如果有两个观点也是一样。如果有 3 个,它将重复操作系统列表 3 次。
  • 您知道一种方法可以更改我的 SELECT JOIN UNION 语句,以便它也添加其他列。也许它会给我同样的问题,但我想看看它是否会。
猜你喜欢
  • 2022-01-09
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
相关资源
最近更新 更多