繁体   English   中英

Mysql表联接,但是如果第一个表具有信息,但第二个表没有信息,则返回值

[英]Mysql table join, but return values if first table has information, but second doesnt

我有以下mysql查询

        SELECT Name, Summoner_Name, ROUND(SUM(timePlayed)/60) as Total_Time 
                    FROM UserNames, games_database 
                    WHERE (UserNames.ID = games_database.UserNames_ID AND 
             UserNames.ID IN ({$Member_Ids_Sql}))
                    GROUP BY UserNames.ID 
                    ORDER BY Total_Time DESC;

它实际上将获取玩家名称,召唤者名称和总play_time。 它通过使用表联接来实现。 作为一个表格,用户名包含用户ID,名称和召唤者名称。 当Games_database表保存玩家玩过的每个游戏时。

我想要做的是显示UserNames表中的用户信息,但还没有玩过任何游戏。

附加信息:UserNames数据库包含ID,Summoner_ID,Summoner_Name,名称

Games_database数据库包含

ID, Match_ID, my_Date, timePlayed, champion, win, Summoner_ID, UserNames_ID, Game_Type

我使此功能对于所有玩游戏的用户都非常有效,但是当一个新用户进入系统时,由于没有玩游戏,他们没有出现在此查询中。

您希望left join查找不匹配项:

SELECT Name, Summoner_Name, ROUND(SUM(timePlayed)/60) as Total_Time 
FROM UserNames LEFT JOIN
      games_database 
      ON UserNames.ID = games_database.UserNames_ID 
WHERE UserNames.ID IN ({$Member_Ids_Sql}) AND
      games_database.UserNames_ID is null
GROUP BY UserNames.ID 
ORDER BY Total_Time DESC;

注意:您应该学习始终使用显式join语法。

您需要的是左外部联接。 左外部联接将在第一个表中返回所有结果(由您的位置填充),并在第二个表中返回结果。 如果没有匹配项,则将显示null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM