[英]Join two MYSQL Database tables and check if second table has no record then return FALSE and if a column has some specific value then also FALSE
[英]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.