使用 IN 查询检索缺失数据的默认值记录
使用IN
子句查询特定日期范围内的用户在线活动时,可能会遇到IN
条件中的某些用户ID在OnlineUsage
表中缺少对应条目的情况。 为了处理这个问题并返回缺失数据的默认值,需要修改查询结构。
标准查询可能只返回具有匹配记录的 ID 的结果。要包含 IN
列表中的所有 ID(即使是那些没有匹配在线使用数据的 ID),请重构查询以利用 LEFT JOIN
(或等效项)。 关键是将日期范围条件从 WHERE
子句移至 JOIN
条件。
<code class="language-sql">SELECT users.Name, users.ID, IFNULL(SUM(OnlineUsage.Minutes), 0) AS MinutesOnline FROM users LEFT JOIN OnlineUsage ON users.ID = OnlineUsage.ID AND OnlineUsage.Date >= '2016-01-01 00:00:00' AND OnlineUsage.Date < '2017-01-01 00:00:00' WHERE users.ID IN (1, 2, 3, 4, 5) -- Your list of IDs here GROUP BY users.ID;</code>
此修改后的查询使用 LEFT JOIN
确保包含所有用户。 IFNULL
函数通过替换 SUM(OnlineUsage.Minutes)
来处理 NULL
返回 0
(对于没有在线使用数据的用户)的情况。 GROUP BY
子句对于正确聚合每个用户的 MinutesOnline
至关重要。 这种方法保证了完整的数据集,提供指定时间范围内所有用户的一致表示,无论他们是否有在线使用记录。
以上是如何使用 IN 查询来检索具有默认值的记录以查找缺失数据?的详细内容。更多信息请关注PHP中文网其他相关文章!