我有这个:
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,它们都可以正常工作。有谁知道这是为什么?
答案 0 :(得分:3)
返回的行必须符合查询的所有条件
APPID
匹配user_games
到games_steam
APPID
匹配user_games
到games_xbox
APPID
与user_games
和 games_steam
匹配的行> games_xbox
。虽然可能存在这样的行,但前两个查询中存在行并不能保证这一点。简单的解决方案是将JOIN
转换为LEFT JOIN
s(严格地说,将INNER JOIN
转换为LEFT OUTER JOIN
s,但INNER
和{{ 1}}是可选关键字)。这导致没有行将被过滤掉,但您的结果将包含以下内容:
OUTER
与APPID
和 games_steam
匹配的行,其中包含两场比赛的详细信息games_xbox
与APPID
匹配的行,games_steam
所有games_xbox
NULL
与APPID
匹配的行,games_xbox
所有games_steam
NULL
匹配 表的行,其中包含APPID
和 games_steam
所有games_xbox
<的详细信息/ LI>
您当然可以使用适当的NULL
子句消除任何一种情况,例如WHERE
。
但是,您可能还想考虑这是否实际上是如何组合结果 - 即使用不同的连接添加列,而不是运行两个单独的查询并让它们添加行。
答案 1 :(得分:1)
MySQL表示,如果选择未聚合但不在GROUP BY列中的列,则可以提供不确定的结果。 Read here