我有这个:
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
Run Code Online (Sandbox Code Playgroud)
但它不会返回任何内容,但是如果我删除任一连接及其相应的 SELECT,它们都可以正常工作。有谁知道这是为什么吗?
返回的行必须满足查询的所有条件
APPID匹配的user_games所有行games_steamAPPID匹配的user_games所有行games_xboxAPPID匹配的行。虽然可能存在这样的行,但是前两个查询中的行的存在决不能保证它。user_gamesgames_steam games_xbox简单的解决方案是将两个JOINs 都转换为LEFT JOINs(严格来说,将INNER JOINs 转换为LEFT OUTER JOINs,但是INNER和OUTER是可选关键字)。这会导致不会过滤掉任何行,但您的结果将包含以下内容:
APPID均匹配的行,以及两个匹配项的详细信息games_steam games_xboxAPPID匹配的行,以及所有games_steam的详细信息games_xboxNULLAPPID匹配的行,以及所有games_xbox的详细信息games_steamNULLAPPID匹配的行,包含来自和all的详细信息games_steam games_xboxNULL当然,您可以使用适当的WHERE子句消除其中任何一种情况,例如WHERE ... AND (games_steam.APPID IS NOT NULL OR games_xbox.APPID IS NOT NULL)。
但是,您可能还需要考虑这是否实际上是您希望组合结果的方式 - 即使用不同的联接添加列,而不是运行两个单独的查询并让它们添加行。
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |