【发布时间】:2011-08-26 14:42:49
【问题描述】:
这是我遇到的问题的摘要版本,但触及了我的问题的核心。真正的问题涉及每月数据表的大量 UNION 组,但 SQL 将是巨大的并且什么都不添加。所以:
SELECT entity_id,
sum(day_call_time) as day_call_time
from (
SELECT entity_id,
sum(answered_day_call_time) as day_call_time
FROM XCDRDNCSum201108
where (day_of_the_month >= 10 AND day_of_the_month<=24)
and LPAD(core_range,4,"0")="0987"
and LPAD(subrange,3,"0")="654"
and SUBSTR(LPAD(core_number,7,"0"),4,7)="3210"
) as summary
问题是:当子查询XCDRDNCSum201108中的表没有返回行时,因为是求和,所以列值包含null。 entity_id 是主键的一部分,不能为空。 如果我取出 sum,只查询 entity_id,子查询不包含行,因此外部查询不会失败,但是当我使用 sum 时,我得到错误 1048 Column 'entity_id' cannot be null
我该如何解决这个问题?有时没有数据。
【问题讨论】:
-
您是否缺少
GROUP BY entity_id? -
否,此查询中没有分组。给大家的备忘录:我不是 DBA!
-
您的内部查询将在除 MySQL 之外的所有 RDBMS 中无效,因为您选择
entity_id但未按其分组。如果存在多个 entity_id,您希望它返回什么? -
看起来组是问题所在。应该不会导致添加分组依据的困难,因为此查询是补充呼叫计数器的一部分,因此应该修复它。想要将其发布为答案以便我投票?