[英]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.