簡體   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