检索 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中文网其他相关文章!