檢索 SQL IN 子句查詢中缺失 ID 的預設值
本文解決了一個常見的 SQL 查詢挑戰:檢索指定 ID 的數據,包括在相關表中找不到 ID 時的預設值。 此場景涉及取得某個日期範圍內的使用者活動數據,使用 IN
子句按使用者 ID 進行篩選。 然而,原始查詢忽略了在指定時間範圍內沒有活動的使用者。
問題源自於查詢的 LEFT JOIN
由於應用於連接表 (INNER JOIN
) 的條件而表現得像 OnlineUseage
。這可以有效地過濾掉指定日期範圍內 OnlineUseage
中不存在的 ID。
解是將日期範圍條件從 JOIN
子句重新定位到 WHERE
子句。這使得 LEFT JOIN
能夠正確運行,包括 users
表中的所有 ID。 OnlineUseage
中沒有符合條目的 ID 將會收到預設值。
這是更正後的查詢:
<code class="language-sql">SELECT users.Name, users.ID, IFNULL(SUM(users.Minutes), 0) AS MinutesOnline FROM users LEFT JOIN OnlineUseage ON users.ID = OnlineUseage.ID WHERE users.ID IN (...) -- Your ID list here AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < '2016-01-31 00:00:00';</code>
此修改後的查詢可確保 IN
子句中的所有 ID 都包含在結果中。 如果 ID 在日期範圍內的 OnlineUseage
中缺少對應條目,則 IFNULL(SUM(users.Minutes), 0)
為 MinutesOnline
提供預設值 0。 此方法可以有效處理遺失的 ID 並傳回所需的預設結果,無論指定日期範圍的 OnlineUseage
表中是否存在 ID。
以上是如何使用 IN 子句傳回 SQL 查詢中缺少 ID 的預設值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!