查询,返回空结果集和NULL结果的困惑。

ltolll 2013-12-23 11:41:11
2条查询语句:
1."SELECT CargoId FROM vw_outgo_detail WHERE (OGDate BETWEEN '2013-12-12 0:00:00' AND '2013-12-12 23:59:59') AND CargoId='211404'"
返回空结果集——没有记录。
2."SELECT CargoId,SUM(Quantity) AS sumQuantity,SUM(Amount) AS sumAmount FROM vw_outgo_detail WHERE (OGDate BETWEEN '2013-12-12 0:00:00' AND '2013-12-12 23:59:59') AND CargoId='211404'"
返回一条记录,CargoId,sumQuantity,sumAmount,三个字段都为NULL

问,
1.为什么同样的WHERE子句,结果集却不同?
2.如何修改让第2条语句也返回空结果集。
...全文
772 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltolll 2013-12-23
  • 打赏
  • 举报
回复
引用 2 楼 gongheguoyingpai11 的回复:
刚才看错了 http://sulong.me/2009/06/08/msql_return_one_row_when_sum 不过楼主可以用一个子查询解决啊
您的意思是先用一个不带聚合函数的查询先判断一下吗?没太明白您的意思。
ltolll 2013-12-23
  • 打赏
  • 举报
回复
引用 1 楼 gongheguoyingpai11 的回复:
SUM 是SQL语句中的标准求和函数,如果没有符合条件的记录,那么SUM函数会返回NULL。 但多数情况下,我们希望如果没有符合条件记录的情况下,我们希望它返回0,而不是NULL,那么我们可以使用例如下面的方法来处理: SELECT COALESCE(SUM(field1),0) FROM table1 WHERE field2 > 100 行了,这下就不用费事去处理返回结果是否为NULL的情况了。 COALESCE 函数的意思是返回参数列表中第一个为空的值,该方法允许传入多个参数,该函数也是SQL中的标准函数。
多谢回复。 问题是我根本不想让它出现在结果集中。 想了一下,只能通过对“CargoId”进行空串判断来实现了。 PS:数据库中明明是NULL用C#取到前台来却成了空串""。 PSS:当前的解决方案不够优雅,还是期待能够在数据库端解决。
gongheguoyingpai11 2013-12-23
  • 打赏
  • 举报
回复
刚才看错了 http://sulong.me/2009/06/08/msql_return_one_row_when_sum 不过楼主可以用一个子查询解决啊
gongheguoyingpai11 2013-12-23
  • 打赏
  • 举报
回复
SUM 是SQL语句中的标准求和函数,如果没有符合条件的记录,那么SUM函数会返回NULL。 但多数情况下,我们希望如果没有符合条件记录的情况下,我们希望它返回0,而不是NULL,那么我们可以使用例如下面的方法来处理: SELECT COALESCE(SUM(field1),0) FROM table1 WHERE field2 > 100 行了,这下就不用费事去处理返回结果是否为NULL的情况了。 COALESCE 函数的意思是返回参数列表中第一个为空的值,该方法允许传入多个参数,该函数也是SQL中的标准函数。
ltolll 2013-12-23
  • 打赏
  • 举报
回复
引用 5 楼 gongheguoyingpai11 的回复:
不是 你先用这个聚合函数进行查询 然后将其作为内层的查询 再在外层进行一个查询 而将之前用聚合函数进行的查询作为外层查询的查询集合
现在这样写: SELECT * FROM (SELECT CargoId,COALESCE(SUM(Quantity),0) AS sumQuantity,COALESCE(SUM(Amount),0) AS sumAmount FROM vw_outgo_detail WHERE (OGDate BETWEEN '2013-12-12 0:00:00' AND '2013-12-14 23:59:59') AND CargoId='211404') A WHERE CargoId IS NOT NULL 其实这里COALESCE函数不是必须的,但写上比较稳妥。
gongheguoyingpai11 2013-12-23
  • 打赏
  • 举报
回复
不是 你先用这个聚合函数进行查询 然后将其作为内层的查询 再在外层进行一个查询 而将之前用聚合函数进行的查询作为外层查询的查询集合

57,064

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧