SQL多个连接不起作用

时间:2014-05-05 03:37:54

标签: php mysql sql

我有这个:

SELECT user_games.APPID, games_steam.name, games_xbox.name
FROM user_games
JOIN games_steam ON user_games.APPID = games_steam.APPID
JOIN games_xbox ON user_games.APPID = games_xbox.APPID
WHERE user_games.UID = "76561197996836099"
GROUP BY user_games.APPID

但它没有返回任何内容,但如果我删除连接及其相应的SELECT,它们都可以正常工作。有谁知道这是为什么?

2 个答案:

答案 0 :(得分:3)

返回的行必须符合查询的所有条件

  • 如果您只选择第一个JOIN,则会获得APPID匹配user_gamesgames_steam
  • 的所有行
  • 如果您只选择第二个JOIN,您将获得APPID匹配user_gamesgames_xbox
  • 的所有行
  • 但是,如果您包含两个 JOIN,则只会获得APPIDuser_games games_steam匹配的行> games_xbox。虽然可能存在这样的行,但前两个查询中存在行并不能保证这一点。

简单的解决方案是将JOIN转换为LEFT JOIN s(严格地说,将INNER JOIN转换为LEFT OUTER JOIN s,但INNER和{{ 1}}是可选关键字)。这导致没有行将被过滤掉,但您的结果将包含以下内容:

  • OUTERAPPID games_steam匹配的行,其中包含两场比赛的详细信息
  • games_xboxAPPID匹配的行,games_steam所有games_xbox
  • 的详细信息
  • NULLAPPID匹配的行,games_xbox所有games_steam
  • 的详细信息
  • NULL匹配 表的行,其中包含APPID games_steam所有games_xbox <的详细信息/ LI>

您当然可以使用适当的NULL子句消除任何一种情况,例如WHERE

但是,您可能还想考虑这是否实际上是如何组合结果 - 即使用不同的连接添加列,而不是运行两个单独的查询并让它们添加行。

答案 1 :(得分:1)

MySQL表示,如果选择未聚合但不在GROUP BY列中的列,则可以提供不确定的结果。 Read here